mai*_*aik 0 ruby ruby-on-rails-3
我正在阅读Rails 3 In Action.有代码我想知道是否有人可以向我解释.我很难理解它:
scope :readable_by, lambda { |user| joins(:permissions).where(permissions: { action: "view", user_id: user.id })}
Run Code Online (Sandbox Code Playgroud)
谢谢,迈克
小智 5
它被称为Rails范围.它本质上创建了一个类方法.readable_by(user),该方法在权限表上执行SQL连接,并返回action列值为"view"且user_id列值等于的记录user.id.
它可以像这样使用(假设它在Comments模型中定义):
readable_comments = Comments.readable_by(current_user)
Run Code Online (Sandbox Code Playgroud)
一个什么都不做的简单范围是这样的:
scope :my_scope_name, lambda {}
Run Code Online (Sandbox Code Playgroud)
接受参数的范围是:
scope :my_scope_name, lambda { |my_parameter| }
Run Code Online (Sandbox Code Playgroud)
然后上面的范围使用了一些ActiveRecord finder方法,特别是joins和where.
| 归档时间: |
|
| 查看次数: |
285 次 |
| 最近记录: |