Rails ajax表单提交

时间:2014-04-09 17:27:54

标签: javascript ruby-on-rails ruby ajax

这是我的布局,全部在authors_controllerAuthor模型中。

index.html.erb

<div class="row">
<div id="author-index" class="col-md-5">
    <%= render 'index'%>
</div>

<div id="author-modal" class="modal fade" role="dialog"></div>
</div>

_index.html.erb

<div class="row">
<%= form_tag authors_path, :method => 'get', remote: true do %>
<%= hidden_field_tag :direction, params[:direction]%>
<%= hidden_field_tag :sort, params[:sort]%>

<p>
    <%= link_to "New Author", new_author_path, remote: true, class: "btn btn-primary"%>

    Search for Author
    <%= text_field_tag :search, params[:search], onchange: "$(this).parent('form').submit();"%>
</p>
<% end %>
</div>

<div id="indexTable" class="row">
     #contains a table
</div>

我的控制器的节目动作:

    def index
    @authors = Author.search(params[:search]).order(sort_column + " " + sort_direction).paginate(:per_page => 10, :page => params[:page])
    respond_to do |format|
        format.html{}
        format.js{}
    end
end

当我查看服务器的日志时,一切都应该可以正常工作

  

开始GET“/ authors?utf8 =%E2%9C%93&amp; direction =&amp; sort =&amp; search = Ali”

     

由AuthorsController #index处理为JS

     

参数:{“utf8”=&gt;“✓”,“direction”=&gt;“”,“sort”=&gt;“”,“搜索”=&gt;“阿里”}

     

作者加载(0.1ms)SELECT authors。* FROM authors WHERE(first_name LIKE'%Ali%'或last_name LIKE'%Ali%')LIMIT 10 OFFSET 0

     

呈现作者/ _index.html.erb(2.3ms)

     

呈现authors / index.js.erb(3.2ms)

     

在7ms完成200 OK(浏览次数:5.2ms | ActiveRecord:0.1ms)

但页面不会改变。当我没有远程时,表单工作正常:是的。

1 个答案:

答案 0 :(得分:1)

您应该将名为js.erb的{​​{1}}模板添加到作者视图文件夹(app / views / authors / index.js.erb)中。在执行Ajax调用时,此模板应具有您要执行的javascript代码(将在客户端发送和评估)。或多或少:

index

注意$("#author-index").html("<%= j(render 'index').html_safe %>") 块中的format.js;这允许控制器响应您的Ajax请求。