如何在form_for

时间:2017-01-04 21:15:23

标签: ruby-on-rails ruby form-for

我有一个包含一些text_fields的表单。其中一个是邮政编码字段。它有一个按钮"搜索"调用特定操作" search_zip_code"返回与该字段关联的地址值。如何在form_for标记内调用此操作?我已经尝试过嵌套的form_tag,但是submit动作调用:create方法。如果我使用" link_to",我无法传递用户输入的邮政编码。最好的方法是什么?

<%= form_for(@model) do |m|%>
  <%= m.label :field_1 %>
  <%= m.text_field :field_1 %>

  <%= m.label :field_2 %>
  <%= m.text_field :field_2 %>

  <div class="field">
    <%= form_tag("/search_zip_code", method: "get") do %>
      <%= label_tag(:zip, "ZIP Code:") %>
      <%= text_field_tag(:zip) %>
    <%= submit_tag("Search") %>
  <% end %>
</div>

<%= m.submit %>
<% end %>

为什么要采取行动&#34; / search_zip_code&#34; submit_tag按钮没有到达?即使我将此路线更改为:post方法,它也无法正常工作。

谢谢,

吉尔赫尔梅

2 个答案:

答案 0 :(得分:0)

所有人,根据https://launchschool.com/blog/the-detailed-guide-on-how-ajax-works-with-ruby-on-rails和您的建议,我的解决方案应该如下:

我的主要_form.html.erb:

<%= form_for(@model) do |m|%>
  <%= m.label :field_1 %>
  <%= m.text_field :field_1 %>

 <%= m.label :field_2 %>
 <%= m.text_field :field_2 %>

 <div class="field">
    <%= m.label :zip %>
    <%= m.text_field :zip %>
    <input type="button" id="search" value="Search" >
</div>
<div id="address-data" style="display:none;"></div>

<script type="text/javascript" charset="UTF-8">
  $("#search").click(function() {
    $.ajax({
      url: '/search_zip_code?zip=' + m_zip.value,
      type: 'get'
    });
  });
</script>

<%= m.submit %>
<% end %>

控制器操作:

def search_zip_code
    @add_zip = search(params[:zip]
    respond_to do |format|
      format.js
    end
end

然后,我需要一个search_zip_code.js.erb文件:

$('#address-data').html("<%= j (render 'form-zip') %>");
$('#address-data').slideDown(350);

search_zip_code.html.erb,其中只包含:

<%= render 'form-zip' %>

最后,_form-zip.html.erb partial:

<%= simple_form_for @add_zip, remote: true do |z| %>
   <%= z.input :street %>
<% end %>

好消息是zip参数正确传递给search_zip_code方法。

但是部分没有呈现:我在所有这些erb文件中都放置了断点。正在访问search_zip_code.js.erb,但search_zip_code.html.erb,当然还有_form-zip.html.erb不是。

我错过了什么吗?

谢谢!

吉尔赫尔梅

答案 1 :(得分:0)

您可以尝试使用嵌套表单的以下代码

<%= form_for @object, url => { controller: 'controller', action: 'create', method: :get } do |f| %>
  <%= f.text_field :first_name %>
  <%= f.submit %>
<% end %>