在我的各种控制器中,在各种查找呼叫中,我将强加一个特定条件:
data_owner_id = @current_user.data_owner_id
as
所以我想实现某种全局范围,从控制器提供信息。 “scope”不能在模型中使用(来自railsdoc)
使用范围定义的范围将在定义时进行评估,而不是在使用时进行评估
并且此时未定义@current_user
。
任何人都可以就DRYest处理这个问题的方法提出任何想法吗?
答案 0 :(得分:1)
如果我理解你的问题,你可以做这样的事情
在控制器中有一个前置过滤器
前:
控制器
class PostsController < ApplicationController
before_filter :owner_id
def owner_id
@data_owner_id = @current_user.data_owner_id
end
end
通过这种方式,您可以确保所有控制器方法都具有变量@data_owner_id 然后你可以有一个范围为@nkm提到
HTH
sameera
答案 1 :(得分:0)
我们可以在这里使用模型范围,例如:如果Post模型具有属性owner_id,
class Post < ActiveRecord::Base
scope :owned, :lambda{|id| where("owner_id = #{id}")}
end
并在控制器中,
Post.owned(@current_user.id)