Ruby on rails rails视图中有多少代码是可以的?

Ruby on rails rails视图中有多少代码是可以的?,ruby-on-rails,model-view-controller,Ruby On Rails,Model View Controller,我知道最好不要让代码进入表示层。但是,我想知道有多少被认为是“可接受的”。例如,我用这行代码填充一个html选择框 CodesecureProject.find(:all,:order => 'name').collect {|project| [project.name, project.id] } 现在我在表单中嵌入了这行代码。我想知道的是,社区是否认为这是太多的代码,它应该首先存储在控制器上的一个实例变量中,然后存储在表单中使用的变量中。我的项目中有很多相同的代码,只是我尝试不做任

我知道最好不要让代码进入表示层。但是,我想知道有多少被认为是“可接受的”。例如,我用这行代码填充一个html选择框

CodesecureProject.find(:all,:order => 'name').collect {|project| [project.name, project.id] }

现在我在表单中嵌入了这行代码。我想知道的是,社区是否认为这是太多的代码,它应该首先存储在控制器上的一个实例变量中,然后存储在表单中使用的变量中。

我的项目中有很多相同的代码,只是我尝试不做任何查找。在您的情况下,我将创建一个命名范围

named_scope :order, lambda { |order| {:order => order}}
并制作代码:

CodesecureProject.order(:name).collect {|project| [project.name, project.id] }
稍微干净一点

如果您有很多需要名称和id的选择框(我有时确实需要),您还可以尝试创建一个除ModelName之外的助手,并返回所需的数组

def magic_for_select(model)
  model.all.collect{|instance| [instance.name, instance.id]}
end

我不会说我永远不会这么做(我在撒谎),但给出的代码示例会让我感到紧张。我想我更倾向于将数据从我的控制器发送到选择框。如果我注意到我做了不止一次的事情,助手方法是另一种选择。我更可能在控制器中看到重复,而不是在不同的视图中看到重复

如果我在多个视图中使用同一个HTML组件,那么我可能会发现自己在一个定制的助手中获取部分内容或包装整个内容:project_select()或类似的东西


我在MVC世界工作的越多,我发现自己越是避免在视图中使用代码。我有一种感觉,如果我达到零代码状态,某种禅宗的掌握将会实现,尽管这在哲学术语以外的任何方面的价值都是非常有争议的。

我会比马兰走得更远一点。一般来说,我会做以下工作:

  • 在模型中创建一个命名的_范围以执行查找
  • 从控制器调用命名的_范围,并将结果存储在实例变量中
  • 仅在视图中放置实例变量

我只会在绝对必要的情况下使用助手。稍后回顾代码时,如果您看到控制器设置视图所需的数据,而不是视图调用帮助程序(另一个要查看的文件),则更容易理解

我在站点模型中使用以下静态方法来实现类似的功能:

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 %>
然后使用以下命令通过视图调用它:

<%= f.select :codesecure_project_id, CodesecureProject.select_options %>

调用您的作用域“ordered_by”实际上会使此代码非常自然易读!如果你有一个不变的列表,比如州或国家,你甚至可以做一个类常量,然后每个Rails实例只加载一次。
<%= f.select :codesecure_project_id, CodesecureProject.select_options %>