2013-08-27 2 views
0

Я повторно использую метод контроллера, и мне нужно изменить область действия по мере необходимости.Передача named_scope как аргумент

Я сохранил имя области в сеансе и хотел бы иметь возможность сделать следующее.

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 в качестве аргумента?

+0

Почему вызывает сеанс в классе 'Submission'? он должен быть вызван на объект контроллера – usha

ответ

1

Возможно, вы не хотите делать это с точки зрения безопасности: злонамеренный пользователь может создать плохо сформированную систему представления, которую вы просто отправляете прямо на Submission.

Сказали, что вы ищете способ send здесь. Попробуйте вместо этого:

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

send попытается вызвать метод этого объекта с именем любого символа вы прошли в Вы можете прочитать больше об этом in the Ruby core docs, но в конечном счете делаю, что позволит вам посылать любой именованные группы в Submission. вы хотите.

+0

Отлично .. спасибо за информацию :) – Kim

Смежные вопросы