Rails form_tag 无需重新加载整个页面即可提交数据

Rails form_tag submit data without reload the whole page

我有一个名为从数据库中搜索渲染数据的模型,使用索引方法我从 3 个模型访问数据,将其显示在索引页面上。 我在索引页本身使用 form_tag,

            <%= form_tag(search_path, :method => "get", :remote => true, id: "search-form") do %>
            <label for="Longitude ">Lon</label>
              <%= text_field_tag :lng, params[:lng], :id => "longitude", placeholder: "Longitude" %>
            <label for="Latitude ">Lat</label>
              <%= text_field_tag :lat, params[:lat], :id => "latitude", placeholder: "Latitude" %>

              <button class="btn waves-effect waves-light" >Process</button>


        <% end %>

我还没有为此创建任何局部视图。

我在form_tag中添加了:remote => true,我不知道在哪里以及如何调用ajax? 我正在从表中搜索数据并使用 '<%= escape_javascript @center_lat.to_json %>' 获取更新的数据;在 index.html.erb 文件中

任何帮助都将不胜感激。

因为表单的远程选项设置为 true,请求将作为 Ajax 请求发布到您的控制器,寻找 JavaScript。为了满足该请求,您的控制器的操作将如下所示:

def MyController

  ...

  def my_action
    respond_to do |format|
      format.js { ... }
      format.html { ... }
    end
  end
  ...

format.js {... 允许控制器响应您的 Ajax 请求。所以你需要渲染一个 .js 或一个 .js.erb.

看看这里,会更有启发:http://guides.rubyonrails.org/working_with_javascript_in_rails.html

您正在使用 :method => "get" 来发出获取请求,页面将始终重新加载,请尝试删除它并尝试查看它是否有效。

此外,您的控制器需要能够响应 JS 调用,使您在控制器上调用的操作具有类似这样的内容

respond_to do |f|
f.html { redirect_to tasks_url }
f.js

结束