我目前正在阅读 Rails 3 In Action。我想知道是否有人可以向我解释一些代码。我很难理解它:
scope :readable_by, lambda { |user| joins(:permissions).where(permissions: { action: "view", user_id: user.id })}
谢谢,迈克
我目前正在阅读 Rails 3 In Action。我想知道是否有人可以向我解释一些代码。我很难理解它:
scope :readable_by, lambda { |user| joins(:permissions).where(permissions: { action: "view", user_id: user.id })}
谢谢,迈克
它被称为Rails 范围。它实质上创建了一个名为的类方法,该方法.readable_by(user)
在权限表上执行 SQL 连接并返回action
列值为“view”且user_id
列值为 equals的记录user.id
。
它可以像这样使用(假设它在Comments
模型中定义):
readable_comments = Comments.readable_by(current_user)
一个什么都不做的简单作用域是这样的:
scope :my_scope_name, lambda {}
接受参数的作用域是这样的:
scope :my_scope_name, lambda { |my_parameter| }
然后上面的范围使用了一些ActiveRecord finder 方法,特别是joins
和where
。