这是来自试图了解关注点和范围的 Rails 菜鸟的问题。
我一直认为范围是 rails 中的类方法,但前几天我从 DHH 看到了这段代码:
module Visible
extend ActiveSupport::Concern`
module ClassMethods
def visible_to(person)
where \
"(#{table_name}.bucket_id IN (?) AND
#{table_name}.bucket_type = 'Project') OR
(#{table_name}.bucket_id IN (?) AND
#{table_name}.bucket_type = 'Calendar')",
person.projects.pluck('projects.id'),
calendar_scope.pluck('calendars.id')
end
end
end
所以该visible
方法的使用方式是这样的:
current_account.posts.visible_to(current_user)
这让我感到困惑。Self
这是帖子的集合,因此我们正在对实例进行操作,而可见方法似乎旨在用作类方法。大卫不是试图将类方法称为动态范围吗?有人可以澄清一下吗?