0
我正在阅读Rails 3 In Action。有代码,我想知道如果有人可以向我解释。我有一个很难理解它:不明白复杂的Ruby代码
scope :readable_by, lambda { |user| joins(:permissions).where(permissions: { action: "view", user_id: user.id })}
感谢, 麦克
我正在阅读Rails 3 In Action。有代码,我想知道如果有人可以向我解释。我有一个很难理解它:不明白复杂的Ruby代码
scope :readable_by, lambda { |user| joins(:permissions).where(permissions: { action: "view", user_id: user.id })}
感谢, 麦克
它被称为Rails scope。它本质上创建了一个名为.readable_by(user)
的类方法,它在权限表上执行SQL联接,并返回action
列值为“view”且user_id
列值等于user.id
的记录。
它可以像这样(假设它在Comments
模型中定义)使用:
readable_comments = Comments.readable_by(current_user)
一个简单的范围,什么也不做是这样的:
scope :my_scope_name, lambda {}
接受参数的范围这样的:
scope :my_scope_name, lambda { |my_parameter| }
然后上述范围使用一些ActiveRecord finder methods,具体为joins
和where
。
很好的答案。为了完整性,请在这里解释'lambda'。 – Anil
好主意。 'lambda'是一个匿名函数。除此之外,我将遵循文档(在Proc对象中解释):http://www.ruby-doc.org/core-1.9.3/Proc.html – nbsp