不懂复杂的Ruby代码

时间:2012-06-19 02:26:44

标签: ruby ruby-on-rails-3

我正在阅读Rails 3 In Action。有代码我想知道是否有人可以向我解释。我很难理解它:

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

感谢, 麦克

1 个答案:

答案 0 :(得分:5)

它被称为Rails scope。它实质上创建了一个名为.readable_by(user)的类方法,它在权限表上执行SQL连接,并返回action列值为“view”且user_id列值等于{{1}的记录}}

可以这样使用(假设它在user.id模型中定义):

Comments

一个无效的简单范围是:

readable_comments = Comments.readable_by(current_user)

接受参数的范围是:

scope :my_scope_name, lambda {}

然后上述范围使用了一些ActiveRecord finder methods,特别是scope :my_scope_name, lambda { |my_parameter| } joins