【发布时间】:2017-05-19 07:22:24
【问题描述】:
我有一个包含一些 text_fields 的表单。其中之一是邮政编码字段。它有一个“搜索”按钮,该按钮调用特定操作“search_zip_code”,该操作返回与该字段关联的地址值。如何在 form_for 标记内调用此操作?我已经尝试过嵌套它的 form_tag,但是提交操作调用了 :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 %>
为什么 submit_tag 按钮没有到达操作“/search_zip_code”?即使我将此路由更改为 :post 方法,它也不起作用。
谢谢,
吉尔赫姆
【问题讨论】:
-
将表单标签移到 form_for 之外,并在您的 form_tag 中添加一个 remote:true 以便它对您的控制器进行 ajax 调用。在您的控制器中,返回 javascript 或 json 并创建一个 javascript 文件,其中包含您要插入到 form_for 中的信息。
-
HTML 规范实际上不允许嵌套表单。通过使用嵌套表单,您依赖于 slop 解析,结果可能不一致。 w3.org/TR/html5/forms.html#the-form-element
-
使用 javascript 将事件处理程序绑定到输入。
-
非常感谢你们,伙计们!我会用 Ajax 做的!
标签: ruby-on-rails ruby form-for