Jos*_*ore 5 model-view-controller ruby-on-rails
我知道最好将代码保留在表示层之外.但是,我想知道多少被认为是"可接受的".例如,我用这行代码填充一个html选择框.
CodesecureProject.find(:all,:order => 'name').collect {|project| [project.name, project.id] }
现在我在表单中嵌入了这行代码.我想知道社区是否认为这是多少代码,它应该首先存储在控制器上的实例变量中,然后是表单中使用的变量.
我不会说我永远不会这样做(我会撒谎)但是给出的代码示例会让我感到紧张.我想我更倾向于将数据传送到我的控制器的选择框中.如果我注意到我不止一次做某事,那么辅助方法是另一种选择.我更有可能在控制器中看到重复,而不是在不同的视图中.
如果我在多个视图中使用相同的HTML组件,那么我可能会发现自己会触及部分或将整个事物包装在自定义帮助程序中:project_select()或其他一些.
我在MVC世界中工作的越多,我就越发现自己在视图中避免使用代码.我有一种感觉,如果我达到零代码状态,将会实现某种禅的掌握,尽管除了哲学术语之外的任何东西的价值都是值得商榷的.
我在Site模型中使用以下静态方法来实现类似的东西:
class Site
  def self.select_options
    Site.find(:all, :order => 'UPPER(name)').collect {|s| [s.name, s.id]}
  end
def
然后在我的域视图中,我调用:
<%= f.select :site_id, Site.select_options %>
这对于这些情况非常有效.
在您的实例中,您可以尝试:
class CodesecureProject
  def self.select_options
    CodesecureProject.find(:all, :order => 'name').collect {|p| [p.name, p.id]}
  end
end
然后通过视图调用它:
<%= f.select :codesecure_project_id, CodesecureProject.select_options %>
| 归档时间: | 
 | 
| 查看次数: | 1010 次 | 
| 最近记录: |