更改Rails中的当前选项卡
我在应用程序顶部有一个选项卡列表,我在application.html.erb的一般布局中包含这些选项卡。 它们看起来像这样:
"GET"%>
当我点击该页面时,我想将所选标签更改为“当前标签”。 因此,当我单击编辑配置文件并加载编辑配置文件页面时,选项卡应如下所示:
"GET"%>
除了将javascript添加到显示的页面之外,有没有办法做到这一点? 或者,如果有尽可能以DRYest方式执行此操作的最佳做法。
谢谢
您可以使用controller.class ==
和controller.action_name ==
来确定您所处的控制器和操作
所以它会是这样的
<%= link_to "Home", provider_path(current_user.id), :method=> "GET"%> <%= link_to "Edit Profile", edit_student_path(current_user.id) %> <%= link_to "Search", provider_search_path %>
我相信有一些方法可以获取您所在页面的当前url,但是您的“主动”样式将仅依赖于通过该路径获取该操作,根据路径,情况可能并非总是如此,这种方式将确保视图根据实际运行的内容显示真实情况,而不是地址栏中的url
你可以尝试类似的东西:
<%= link_to "Home", provider_path(current_user.id), :method=> "GET"%> <%= link_to "Edit Profile", edit_student_path(current_user.id) %> <%= link_to "Search", provider_search_path %>
…然后检查你来自哪个控制器。
看看TabsOnRails
你可以这样做:
<%= current_page?(:controller => 'your_controller', :action => 'index') ? 'current' : '' %>
我为此做了一个帮助,它可以接受任何对嵌套资源有用的参数,但它也接受一个控制器名称,就像其他答案一样。
application-helper.rb :
def is_active(*links) links.each { |link| return "active" if params[:controller] == link } end
application.html.erb :
...
要么
使用HAML 和嵌套资源的示例(对任何提供的控制器名称都是活动的):
applcation.html.haml :
%li{:class => is_active('blogs', 'comments')}
切换页面时,您可以将@current_tab之类的内容从控制器方法传递回erb。 然后使用@current_tab来决定哪个li应该是当前类。 或者,您可以为每个li和id或一些唯一属性提供,只需使用您选择的JavaScript框架更改类。
我不是说这是最好的方法,但是我很勇敢发布我想出来的:)
我的布局中的一些示例菜单链接:
<%= menu_link_to 'teachers', 'show_date', 'Calendar', calendar_url %> <%= menu_link_to 'announcements', nil, 'Announcements', announcements_path %>
然后我创建了这个帮手:
def menu_link_to(*args, &block) controller = args.shift action = args.shift if controller == controller_name && (action.nil? || action == action_name) if args.third.nil? args.push({:class => 'selected'}) else args.third.merge!({:class => 'selected'}) end end link_to *args, &block end
我在应用程序助手中做了这个,它似乎工作正常:
def current_page(path) "active" if current_page?(path) end
然后像这样打电话:
<%= link_to "Home", root_path %>