我正在使用此代码将数据显示到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;?)
提前谢谢
答案 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}