2015-07-09 97 views
0

我只是很好奇params [:controller]和controller.controller_name的正確用法,因爲我正在尋找一種方法來獲取視圖的當前控制器但我不確定哪個是正確的,我的意思是如果在使用這個或那個時有不同的表現。rails params [:controller] vs controller.controller_name

+0

你對這些信息做了什麼?你爲什麼覺得你需要它? – Makoto

+0

我個人會使用'params [:controller]'並認爲這是可以接受的方法。 @Makoto這不是很不尋常 - 例如,在我的使用案例中,我在我的應用程序佈局中使用它來排除Google索引中的某些頁面。 –

回答

0

我想說在你的視圖中使用controller_name會更好一些,因爲你使用的是一個命名助手,如果它將從Rails中刪除,它將發出detaachiation通知。 params[:controller]與實施緊密結合,不會。

+0

儘管實際上Rails永遠不會從params散列中刪除控制器密鑰, – max

+0

從[Rails指南](http://guides.rubyonrails.org/action_controller_overview.html#routing-parameters):'params散列將始終包含:controller和:action鍵,但您應該使用方法controller_name和action_name改爲訪問這些值.' – rocknrollcanneverdie

1

On Rails 4.2.5至少,controller_name和params [:controller]是不等價的。

如果您在應用程序/控制器的子目錄中有控制器,controller_name不包含該目錄。例如,假設你有應用程序/控制器/管理/ 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是這裏的罪魁禍首。