如何通过控制器和操作更改视图,即使这是根路径

时间:2017-08-23 06:32:26

标签: ruby-on-rails routes

我有一个装饰器,通过控制器和动作改变行为,如下所示:

class ShortPositionDecorator < ApplicationDecorator
  delegate_all
  def company_short_name
    return if h.current_page?(action: 'positions', controller: 'users')
    object.company.short_name
  end
end

这是它的路线。

get 'positions', to: 'users#positions'

但是当我使用路径作为根路径时,

配置/ routes.rb中

root 'users#positions'

我必须为根路径添加一个条件。

 def company_short_name
   return if h.current_page?(action: 'positions', controller: 'users')
+  return if h.current_page?('/') 
   object.company.short_name
 end

是否有办法通过操作和控制器更改视图,即使路径为/

如果我使用current_page?('/'),我必须更改几个位置才能更改根路径。我想避免那种混乱。

1 个答案:

答案 0 :(得分:0)

您可以使用controller_name and action_name获取当前控制器/操作并创建自定义帮助程序:

def current_controller_action?(controller:,action:)
  controller == controller_name && action == action_name
end

并使用它代替current_page? ...快速查看the source for current_page?会显示它调用url_for并传递您传递给它的内容,因此路径文件中有多个路由指向相同的控制器/动作不能很好地适应它。