如何使用字符串调用名为scope的活动记录

我确定我很想理解使用电话,但我想我可以做这样的事情。

@case_studies = CaseStudy.call("some_named_scope") 

其中"some_named_scope"也是CaseStudy的命名范围。 我需要使用调用的原因是因为我已经命名了与控制器中的操作名称相同的范围,所以我正在跳这样做。

 @case_studies = CaseStudy.call(params[:action]) 

编辑

原谅我,我刚刚意识到我正在考虑发送方法,一些单词调用如何卡在我脑海中。 但是@case_studies = CaseStudy.send(params[:action])就像我想的那样工作。

如果some_named_scopeCaseStudy模型的named_scope ,则可以使用send调用与params[:action]值对应的方法。 但这显然是可以大量利用的。

所以,除了安全性,你可以开始:

 @case_studies = CaseStudy.send(params[:action]) 

希望它有效。

尽管@kolrie有正确的答案,但它根本不安全。

它应该列入白名单,如下所示:

 scope = ["first_scope", "second_scope", "default_scope"].include? params[:action] ? params[:scope] : "default_scope" @case_studies = CaseStudy.send(scope) 

如果我理解你的意思,那就是你应该称之为:

 @case_studies = CaseStudy.send(:some_named_scope) 

您可以使用send调用方法并将符号或字符串传递给它。