我有两种形式可以导致一个控制器动作:
<%= form_tag some_action_path do %>
<%= slect_tag 'foo[]', options_for_select([
["Nothing", nil],
["wal1", "wal1"],
["wal2", "wal2"]]) %>
<%= submit_tag "Search" %>
<% end %>
<%= form_tag some_action_path do %>
<%= check_box_tag 'foo[]', "wal1" %>
<%= check_box_tag 'foo[]', "wal2" %>
<%= submit_tag "Search" %>
<% end %>
我的问题是当我选择&#34;没什么&#34;在select select_tag中,我得到了[&#34;&#34;],另一方面,当我提交第二个表单而没有选择任何check_box时,我得到了nil。这让我对我的搜索功能有所了解。因为它必须如下所示:
def search_action(foo)
if foo.nil?
Obj.all
elsif foo.present? && foo[0].blank?
Obj.all
elsif foo.present? && foo[0].pesent?
Obj.where(foo: foo)
end
end
上面的函数是无关紧要的,我只想说明这两种形式之间的差异输出如何使我的搜索操作复杂化。
我的问题:
有没有办法从&#34; select_tag&#34;中返回nil。形成?或者我把两个表单引导到一个控制器动作和一个搜索方法是愚蠢的,我应该编写两个动作,其中两个搜索动作导致一个视图。 :D
答案 0 :(得分:0)
通常搜索功能采用一种形式,您可以使用这两种选项,但如果您希望它们是单独的搜索,则您的方法没有任何问题。虽然我会将其中任何一个表单的输入重命名为与其他表单输入不同,以便在控制器上区分它们然后能够编写类似
的内容def search_action(foo)
if form_1_attribute.present?
Obj.where(form_1_attribute: form_1_attribute)
elsif form_2_attribute.present? && form_2_attribute.blank?
Obj.where(form_2_attribute: form_2_attribute)
else
Obj.all
end
end