2012-06-19 42 views
0

我正在阅读Rails 3 In Action。有代码,我想知道如果有人可以向我解释。我有一个很难理解它:不明白复杂的Ruby代码

scope :readable_by, lambda { |user| joins(:permissions).where(permissions: { action: "view", user_id: user.id })} 

感谢, 麦克

回答

5

它被称为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,具体为joinswhere

+0

很好的答案。为了完整性,请在这里解释'lambda'。 – Anil

+0

好主意。 'lambda'是一个匿名函数。除此之外,我将遵循文档(在Proc对象中解释):http://www.ruby-doc.org/core-1.9.3/Proc.html – nbsp