Rails - f.select并且只给出来自给定哈希的一些值

时间:2015-05-12 20:47:14

标签: ruby-on-rails ruby forms select hash

我正在使用此代码将数据显示到f.select标记:

  <%= f.select :status, STATUSES, {}, :class => 'form-control' %>      

STATUSES哈希包含以下内容:

STATUSES = {"A" => 0,
            "B" => 1,
            "C" => 2,
            "D" => 3,
            "E" => 4} 

如何从散列中仅显示小于4的值(所以&#34; A&#34;,&#34; B&#34;,&#34; C&#34;和&#34; D&# 34;?)

提前谢谢

4 个答案:

答案 0 :(得分:1)

你的意思是这样的:

STATUSES.reject { |key, value| value >= 4 }

如果是这样,我会亲自为它创建一个帮助方法(不确定你是否可以访问STATUSES常量):

module StatusHelper
  def statuses_collection
    STATUSES.reject { |key, value| value >= 4 }
  end
end

在你看来:

<%= f.select :status, statuses_collection, {}, :class => 'form-control' %>

答案 1 :(得分:0)

如果可能的话,我建议您在控制器中设置哈希值。

但是,如果您想在选择表单代码中执行所有业务,您可以尝试这样的事情:

      <%= f.select(:status, options_for_select(STATUSES.map { |key, value| [key, value] if value < 4 }), {}, class: 'form-control') %>

不完美,但在Rails 3中有效。

答案 2 :(得分:0)

如果没有更广泛的背景,我建议在控制器中对其进行过滤。

def your_controller_method @statuses = STATUSES.reject{ |k,v| v >= 4 } end

然后在你看来:

<%= f.select :status, @statuses, {}, :class => 'form-control' %>

答案 3 :(得分:0)

与上面的'reject'相同,但条件看起来更好

STATUSES.select {|key,value| value < 4}