rails params [:controller] vs controller.controller_name

时间:2015-07-09 21:56:25

标签: ruby-on-rails

我只是对params [:controller]和controller.controller_name的正确使用感到好奇,因为我正在寻找一种方法来获取视图的当前控制器,例如但我是不确定哪个是正确的,我的意思是如果在使用这些或其他方面有不同的表现。

2 个答案:

答案 0 :(得分:2)

至少在Rails 4.2.5上,controller_name和params [:controller]不等效。

如果控制器位于app / controllers的子目录中,则controller_name不包含该目录。例如,假设你有app / controllers / admin / users_controller.rb(类Admin :: UsersController),你会得到这个:

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

这是来自actionpack-4.2.5的方法定义:

name.demodulize

else是罪魁祸首。

答案 1 :(得分:0)

我想说在你的视图中使用controller_name会更好一点,因为你使用的是一个命名助手,如果它要从Rails中删除,它会发出一个去除依赖声明。 params[:controller]与实施紧密相关,但不会。