当前控制器路径,未指定rails中的操作

时间:2012-12-26 07:45:17

标签: ruby-on-rails ruby

我有一个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 %>

问题是这有效,但在整个应用程序中,我总是找到一两页,它给我一个路由错误。有什么方法可以告诉用户控制器和操作,而无需指定任何动作?

1 个答案:

答案 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 %>