select_tag总是要返回一些东西吗?

时间:2015-08-23 06:59:23

标签: ruby-on-rails forms

我有两种形式可以导致一个控制器动作:

<%= 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

1 个答案:

答案 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