【问题标题】:Rails ajax form submitRails ajax 表单提交
【发布时间】:2014-05-23 01:58:01
【问题描述】:

这是我的布局,全部在 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&direction=&sort=&search=Ali"

AuthorsController#index 作为 JS 处理

参数:{"utf8"=>"✓", "direction"=>"", "sort"=>"", "search"=>"Ali"}

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

渲染作者/_index.html.erb (2.3ms)

渲染作者/index.js.erb (3.2ms)

在 7 毫秒内完成 200 次 OK(查看次数:5.2 毫秒 | ActiveRecord:0.1 毫秒)

但是页面没有改变。当我在没有遥控器的情况下执行此操作时,表单运行良好:true。

【问题讨论】:

    标签: javascript ruby-on-rails ruby ajax


    【解决方案1】:

    您应该将名为 indexjs.erb 模板添加到作者视图文件夹 (app/views/authors/index.js.erb) 中。当执行 Ajax 调用时,该模板应该包含您想要执行的 JavaScript 代码(将在客户端发送和评估)。或多或少:

    $("#author-index").html("<%= j(render 'index').html_safe %>")
    

    注意respond_to 块中的format.js;允许控制器响应您的 Ajax 请求。

    【讨论】: