值不是使用Rails ajax表单提交的

时间:2015-04-21 06:46:23

标签: ruby ajax ruby-on-rails-3.2

我想使用Rails ajax表单在db中存储值,但它不存储任何内容。请让我知道我在哪里犯了错误并帮助我解决了这个问题。

我正在解释下面的代码。

的用户/ index.html.ebr:

<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>

控制器/ users_controller.rb

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

create.js.erb

$("#sdf-puri").css("display", "block");
$("#sdf-puri").html("<%= escape_javascript (render 'table' ) %>");
$("#sdf-puri").slideDown(350);

create.html.erb

<%= render 'table' %>

_table.html.erb

<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>

提交后的值应该显示在同一个索引页面中。请帮帮我。

2 个答案:

答案 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