范围应该在控制器或模型中?

时间:2017-05-04 17:12:22

标签: ruby ruby-on-rails-4

我是ruby和rails开发的新手并且考虑到了这个问题。如果我对创建范围有疑虑,请说出latest_records,它为我提供了客户的最新数据

现在在这种情况下使用范围的最佳做法是什么。范围应该在模型中还是在控制器中?

我阅读了一些在线文章,它讨论了胖模型和瘦控制器,因为范围是与数据库相关的工作,所以我猜他们应该在模型中。

有任何建议或想法吗?

2 个答案:

答案 0 :(得分:3)

你猜对了。 范围属于模型,需要活动记录类对象才能工作。 范围只是activerecord查询分为几部分,它有助于查看您的查询优雅和干燥。 例如 如果您想让用户收到确认的电子邮件,您可以:

User.where(confirmed: true)

但是您的用户模型中包含范围:

scope :confirmed, -> { where(confirmed: true) }

你只需:

User.confirmed

有关详细信息,请参阅此答案here

答案 1 :(得分:1)

范围只能在模型中定义,因此必须在模型上。