2015-07-09 3 views
0

Мне просто интересно узнать правильное использование параметров [: controller] и controller.controller_name, поскольку я ищу способ получить текущий контроллер вида, например но я не уверен, что это правильно, я имею в виду, если что-то другое по производительности при использовании того или другого.rails params [: controller] vs controller.controller_name

+0

Что вы делаете с этой информацией? Почему вы чувствуете, что вам это нужно? – Makoto

+0

Я лично использовал бы 'params [: controller]' и думаю, что это приемлемый подход. @Makoto это не так уж необычно - например, в моем случае использования я использую это в своем макете приложения, чтобы исключить определенные страницы из индексации Google. –

ответ

0

Я бы сказал, что с помощью controller_name в ваших представлениях немного лучше, так как вы используете названный помощник, который выдает уведомление об отказе, если он должен быть удален из Rails. params[:controller] тесно связан с реализацией и не будет.

+0

Несмотря на то, что в действительности его маловероятно, что Rails когда-либо удалит ключ контроллера из хэша params. – max

+0

Из руководства [Rails] (http://guides.rubyonrails.org/action_controller_overview.html#routing-parameters): 'Хэши params всегда будут содержать ключи: controller и: action, но вы должны использовать методы имя_контроллера и action_name вместо этого, чтобы получить доступ к этим значениям. ' – rocknrollcanneverdie

1

На Rails 4.2.5, по крайней мере, имя_контроллера и параметры [: controller] НЕ эквивалентны.

Если у вас есть контроллер в подкаталоге приложений/контроллеров, имя_контроллера не включает в себя каталог. Например, у вас есть приложение/контроллеры/администратора/users_controller.rb (класс :: Администратор UsersController), вы получите это:

params[:controller] => 'admin/users' 
controller_name => 'users' 

Вот определение метода из actionpack-4.2.5:

def self.controller_name 
    @controller_name ||= name.demodulize.sub(/Controller$/, '').underscore 
end 

name.demodulize является преступником здесь.

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