我有几个对象都有一个approved字段.
在所有模型中实施范围的最佳方法是什么?
例如,我有一个sighting对象和一个comment对象.在向公众提供之前,他们都必须得到管理员的批准.
所以,我怎么可以创建一个返回范围comment.approved以及sighting.approved分别不重复它在每一个模型?这是关注的问题吗?
Mar*_*ach 14
虽然只想在每个模型中声明一个范围,但是如果你只想要范围界定功能的话.使用a ActiveSupport::Concern将使您能够添加其他方法,如果这是您认为将要发生的事情.这是一个例子:
# /app/models/concerns/approved.rb
module Approved
extend ActiveSupport::Concern
included do
default_scope { where(approved: false) }
scope :approved, -> { where(approved: true) }
end
def unapprove
update_attribute :approved, false
end
end
class Sighting < ActiveRecord::Base
include Approved
end
class Comment < ActiveRecord::Base
include Approved
end
Run Code Online (Sandbox Code Playgroud)
然后,您可以拨打电话Sighting.approved,Comment.approved以获取已批准记录的相应列表.你也得到了unapprove方法,可以做类似的事情Comment.approved.first.unapprove.
在这个例子中,我还包括default_scope哪些意味着调用类似Sighting.all或Comment.all将仅返回未批准的项目.我将此作为示例包含在内,它可能不适用于您的实现.
| 归档时间: |
|
| 查看次数: |
3244 次 |
| 最近记录: |