0

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

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

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 作为参数传递?

4

1 回答 1

1

从安全的角度来看,您可能不想这样做:恶意用户可能会制作格式不正确的 submit_scope,您将直接发送到Submission.

也就是说,您正在这里寻找方法send。试试这个:

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

send将尝试在该对象上调用一个方法,命名为您传入的任何符号。您可以在 Ruby 核心文档中阅读有关它的更多信息,但最终这样做将允许您将任何命名范围发送给Submission您想要的。

于 2013-08-27T16:30:16.737 回答