我有一个选择下拉列表,我从数据库条目生成选项,然后在开头添加一个选项,如:
@select = Service.find_services_by_id(id).collect { |p| [p.name, p.id] }
@select.unshift( [ "Choose a service", 0] )
然后在HAML视图中我有:
=select_tag "service_id", options_for_select(@select)
但我正在考虑重构:
1)在模型中添加另一个方法,该方法也进行非移位操作,将选择的所有数据返回给我
2)将整个@select定义移动到视图助手并从视图中调用它
3)只需在控制器中有第一个@select行,然后让一个视图帮助器执行'unshift'部分
但我无法弄清楚哪些是最有意义的。想法?
答案 0 :(得分:0)
1)没有多大意义。该模型不应该在数据上添加标题以使其更好 - 这是视图的工作。
2)和3)都是合理的 - 我个人倾向于3),但任何一个都是好的。
答案 1 :(得分:0)
我会去第三,但不仅在帮助器中执行unshift
,而且在那里创建整个select
东西:
module SomeHelper
def service_select(objects)
select_tag "service_id", options_for_select(objects.unshift(["Select a service", 0]))
end
end
然后在视图中,您只需拨打=service_select(@select)
。