【问题标题】:Does select_tag always have to return something?select_tag 总是要返回一些东西吗?
【发布时间】:2015-08-23 16:30:01
【问题描述】:

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

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

我的问题是,当我在 select_tag 中选择“Nothing”时,我得到 [""],另一方面,当我提交第二个表单时没有选择任何复选框,我得到 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

上面的函数无关紧要,我只是想说明这两种形式之间的差异输出如何使我的搜索操作复杂化。

我的问题:

有没有办法从“select_tag”表单中返回 nil ?或者我愚蠢地将两种形式引导到一个控制器操作和一个搜索方法,我应该编写两个操作,两个搜索操作导致一个视图。 :D

【问题讨论】:

    标签: ruby-on-rails forms


    【解决方案1】:

    通常,搜索功能是一种形式,您可以同时使用这两个选项,但如果您希望它们是单独的搜索,那么您的方法没有任何问题。虽然我会将其中一个表单的输入重命名为与其他表单输入不同,以便在控制器上区分它们,然后能够编写类似

    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
    

    【讨论】:

    • 我不明白为什么if form_1_attribute.present? &amp;&amp; form_1_attribute.present? 他们是相同的评价?具有单独输入名称的想法可能是个好主意。
    • @Kazik:你说得很对。不小心把它忘在那里了。现已修复。
    猜你喜欢
    • 1970-01-01
    • 2013-12-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-07
    • 2016-05-07
    • 1970-01-01
    相关资源
    最近更新 更多