我想使用Rails ajax表单在db中存储值,但它不存储任何内容。请让我知道我在哪里犯了错误并帮助我解决了这个问题。
我正在解释下面的代码。
<script type="text/javascript">
$('form').submit(function() {
var valuesToSubmit = $(this).serialize();
console.log('hello')
$.ajax({
type: "POST",
url: $(this).attr('create'), //sumbits it to the given url of the form
data: valuesToSubmit,
dataType: "JSON" // you want a difference between normal and ajax-calls, and json is standard
}).success(function(json){
console.log("success", json);
});
return false; // prevents normal behaviour
});
</script>
<p><%= flash[:notice] %></p>
<%= form_for :user do |f| %>
<p>
Name : <%= f.text_field :name,placeholder:"Enter your name" %>
</p>
<p>
Email : <%= f.email_field :email,placeholder:"Enter your email" %>
</p>
<p>
Content : <%= f.text_field :content,placeholder:"Enter your content" %>
</p>
<p>
<%= f.text_field :submit,:onchange => "this.form.submit();" %>
</p>
<% end %>
<div id="sdf-puri" style="display:none" >
</div>
class UsersController < ApplicationController
def index
@user=User.new
respond_to do |format|
format.html
format.js
end
end
def create
@user=User.new(params[:user])
if @user.save
flash[:notice]="user created"
end
end
end
$("#sdf-puri").css("display", "block");
$("#sdf-puri").html("<%= escape_javascript (render 'table' ) %>");
$("#sdf-puri").slideDown(350);
<%= render 'table' %>
<table>
<tr>
<th>Name :</th>
<th>Email :</th>
<th>Content :</th>
</tr>
<% @user.each do |user| %>
<tr>
<td><%= user.name %></td>
<td><%= user.email %></td>
<td><%= user.content %></td>
</tr>
<% end %>
</table>
提交后的值应该显示在同一个索引页面中。请帮帮我。
答案 0 :(得分:0)
Rails有一个内置的Ajax系统,您需要在表单上添加remote: true
form_for(@user, remote: true) do |f|
这告诉rails使用Ajax提交表单......你不需要表单上方的所有脚本
您的控制器已正确拥有以下行:
responds_to js
所以你要做的就是在views / user文件夹中有一个create.js文件来处理你的返回Ajax内容,比如追加或褪色等等。
答案 1 :(得分:0)
您需要在表单标记中添加remote:true