将范围添加到rails 3应用程序扰乱设计变量

Jay*_*Jay 3 ruby-on-rails-3

我正在使用Devise进行身份验证.它的变量"current_user"在应用程序中广泛使用,没有任何问题.然后我在名为"Answer"的模型中添加了以下范围

scope :user_answers, where (:user_id => current_user.id)
Run Code Online (Sandbox Code Playgroud)

此范围的结果是名为"问题"的模型中另一个范围的一部分

scope :qs_w_user_ans, joins(:questions) & Answer.user_answers
Run Code Online (Sandbox Code Playgroud)

从那时起,我收到以下错误:

undefined local variable or method `current_user'
Run Code Online (Sandbox Code Playgroud)

为什么会这样?

谢谢.

McS*_*tch 6

正如Zabba所说,您无法访问current_user您的模型.您可以将参数传递到您的范围:

scope :user_answers, lambda {|user_id| where(:user_id => user_id)}
Run Code Online (Sandbox Code Playgroud)

然后你可以这样调用范围(假设你是从控制器或视图调用它):

Answer.user_answers(current_user.id)
Run Code Online (Sandbox Code Playgroud)

更新

我之前没有尝试过,但我想你可以做以下事情:

scope :qs_w_user_ans, lambda {|user_id| joins(:questions) & Answer.user_answers(user_id)}
Run Code Online (Sandbox Code Playgroud)

你必须用lambda包装外部作用域并在current_user.id调用时传入qs_w_user_ans.然后传递来自该lambda的user_id user_answers,它本身使用lambda来接收该参数.用我以前的答案(总共两个lambdas)试试这个.