In my ApplicationController
我有demo_mode?
方法(返回true
当当前登录的用户类型为“demo”时)。
Post
模型有publisher_id
字段,它指的是Users
table.
User
有user_type
字段,其可能值之一是“demo”。
底线:帖子p
由“演示”用户发布当且仅当:
User.find(p.publisher_id).user_type == "demo"
我想创建一个命名范围Post.relevant
将返回:
- 由“演示”用户发布的所有帖子,如果
demo_mode? == true
- 由非“演示”用户发布的所有帖子,如果
demo_mode? == false
您将如何创建这样一个命名范围?我应该搬家吗demo_mode?
到其他地方?
使用 lambda 来创建动态作用域,并将会话信息保留在模型之外:
在你的模型中:
class Post < ActiveRecord::Base
scope :relevant, lambda {|demo_mode|
joins(:publisher).
where("publishers.user_type #{demo_mode ? '' : 'NOT'} LIKE 'demo'")
}
end
然后在控制器中:
posts = Post.relevant(demo_mode?)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)