我有一个包含一些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方法,它也无法正常工作。
谢谢,
吉尔赫尔梅
答案 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 %>