使用session中的信息实现with_scope

时间:2011-10-23 14:39:42

标签: ruby-on-rails scope

在我的各种控制器中,在各种查找呼叫中,我将强加一个特定条件:

data_owner_id = @current_user.data_owner_id 

as

  1. 我想要干嘛和
  2. 我不想冒险忘记将其添加到所有控制器中的所有发现
  3. 所以我想实现某种全局范围,从控制器提供信息。 “scope”不能在模型中使用(来自railsdoc)

      

    使用范围定义的范围将在定义时进行评估,而不是在使用时进行评估

    并且此时未定义@current_user

    任何人都可以就DRYest处理这个问题的方法提出任何想法吗?

2 个答案:

答案 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)