传递named_scope作为参数

时间:2013-08-27 16:16:48

标签: ruby-on-rails

我正在重用控制器方法,我需要根据需要更改范围。

我已将范围名称存储在会话中,并希望能够执行以下操作。

if params[:scope_name]
  session[:submission_scope_name] = params[:scope_name]
else
  session[:submission_scope_name] = "allSubs"
end


@search = Submission.session[:submission_scope_name].search do
          ...
end

上面的代码给出了以下错误消息:

undefined method `session' for #<Class:0x00000002ad7df0>

有没有办法将named_scope作为参数传递?

1 个答案:

答案 0 :(得分:1)

从安全角度来看,您可能不希望这样做:恶意用户可能会创建一个格式不佳的submission_scope,您只需直接发送到Submission

那就是说,你在这里寻找方法send。试试这个:

Submission.send(session[:submission_scope_name].to_sym).search

send将尝试在该对象上调用一个名为您传入的符号的方法。您可以阅读有关它的更多信息in the Ruby core docs,但最终这样做可以让您将任何命名的范围发送到{ {1}}你想要的。