在哪里与RoR放置共同逻辑

时间:2014-01-20 12:05:18

标签: ruby-on-rails ruby-on-rails-3 rails-activerecord

我有一个模型Project出现在我正在构建的应用程序中的多个控制器中,因为它出现在多个页面上。 where这个句子本身并不复杂,但我觉得它太大了,不能重复每个需要有这些约束的项目的方法。

我的问题是,如果可能的话,Projects这个常见的呼吁会去哪里?在.NET中,我有一个ProjectService类,其中一个方法可以返回所有项目,另一个返回满足我条件的所有项目。我是Rails的新手,所以我很难看到它适合的位置?

1 个答案:

答案 0 :(得分:4)

您可以使用类方法或范围。

class Project < ActiveRecord::Base
  # example for a scope
  scope :awkward_projects,where(awkward: true)

  # example for a class method.     
  def self.awkward_projects
    where(awkward: true)
  end

end

在SO答案中做过的事情是非常安全的。请阅读以下内容并仔细选择。

引用answer

“通常,我使用简单单行的范围条目来过滤我的结果集。但是,如果我在”范围“中做任何复杂的事情,可能需要详细的逻辑,lambdas,多行等,我更喜欢使用类方法。当你捕获时,如果我需要返回计数或类似的东西,我使用类方法。“