在哪里放置生成选择选项的代码

时间:2010-07-08 03:16:45

标签: ruby-on-rails

我有一个选择下拉列表,我从数据库条目生成选项,然后在开头添加一个选项,如:

@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'部分

但我无法弄清楚哪些是最有意义的。想法?

2 个答案:

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