我有一个rails应用程序,它有2个菜单,其中菜单会根据用户当前访问的页面而改变。有没有办法告诉rails如果用户访问此控制器,无论访问者是否在索引上,编辑,创建,更新,删除方法?
我目前正在使用这样的帮手,它确实有点混乱。
def which_page
current_page?(root_path) ||
current_page?(skate_movies_path) ||
current_page?(new_skate_photos_path(@user)) ||
current_page?(skate_photos_path) ||
current_page?(skate_tricks_path)
end
在我的视图中部分
<% if which_page %>
<%= default_menu %> #upload, #photos, #trick-tips, #goals
<% else %>
<%= skate_menu %> #dashboard, #shared-videos, #profile
<% end %>
问题是这有效,但在整个应用程序中,我总是找到一两页,它给我一个路由错误。有什么方法可以告诉用户控制器和操作,而无需指定任何动作?
答案 0 :(得分:4)
您可以在before_filter
中定义ApplicationController
,并将其命名为set_menu
class ApplicationController < ActionController::Base
before_filter :set_menu
protected
def set_menu
@menu = 'default'
end
end
然后,在每个要显示不同菜单的控制器中,您将覆盖set_menu
,例如:
class SkateMoviesController < ApplicationController
protected
def set_menu
@menu = 'skate'
end
end
您可以使用action_name
中的帮助方法set_menu
来访问控制器中的当前操作。
然后在你的观点中:
<% if @menu == 'default' %>
<%= default_menu %>
<% else %>
<%= skate_menu %>
<% end %>