【问题标题】:Where to place common logic with RoR使用 RoR 放置公共逻辑的位置
【发布时间】:2014-02-09 14:27:39
【问题描述】:

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

我的问题是,如果可能的话,这个对Projects 的常见调用会去哪里?在.NET 中,我有一个ProjectService 类,其中一个方法会返回所有项目,另一个会返回所有满足我条件的项目。我是 Rails 的新手,所以我很难知道它适合什么地方?

【问题讨论】:

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


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 2012-09-12
    • 2012-08-09
    • 1970-01-01
    • 2011-10-16
    • 2013-01-20
    • 1970-01-01
    • 1970-01-01
    • 2017-04-02
    • 1970-01-01
    相关资源
    最近更新 更多