我正在使用Devise进行身份验证。它的变量“current_user”在应用程序中广泛使用,没有任何问题。然后我在名为“Answer”的模型中添加了以下范围
scope :user_answers, where (:user_id => current_user.id)
此范围的结果是名为“Question”
的模型中另一个范围的一部分scope :qs_w_user_ans, joins(:questions) & Answer.user_answers
从那时起,我收到以下错误:
undefined local variable or method `current_user'
为什么会这样?
感谢。
答案 0 :(得分:6)
正如Zabba所说,您无法访问模型中的current_user
。您可以将参数传递到您的范围:
scope :user_answers, lambda {|user_id| where(:user_id => user_id)}
然后你可以像这样调用范围(假设你是从控制器或视图调用它):
Answer.user_answers(current_user.id)
<强>更新强>
我之前没有尝试过,但我想你可以做类似以下的事情:
scope :qs_w_user_ans, lambda {|user_id| joins(:questions) & Answer.user_answers(user_id)}
您必须使用lambda包装外部作用域,并在调用current_user.id
时传入qs_w_user_ans
。然后将来自该lambda的user_id传递给user_answers
,{{1}}本身使用lambda来接收该参数。用我以前的答案(总共两个lambdas)试试这个。