2015-07-09 65 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是这里的罪魁祸首。