Jac*_*cob 47 ruby ruby-on-rails ruby-on-rails-3 ruby-on-rails-3.1
对于以下代码:
<%= link_to "Some Page", some_path %>
Run Code Online (Sandbox Code Playgroud)
如何current使用current_page??辅助方法应用css类?
或者,如果有其他更好的方法可用?
Mic*_*jen 90
在app/helpers/application_helper.rb中
def cp(path)
"current" if current_page?(path)
end
Run Code Online (Sandbox Code Playgroud)
在您的观点中:
<%= link_to "All Posts", posts_path, class: cp(posts_path) %>
Run Code Online (Sandbox Code Playgroud)
基本上写一个简单的包装器.此外,您可以扩展该方法以允许通过添加参数来应用其他类.保持简洁/干燥的观点.或者,在不扩展方法的情况下,您可以像这样添加其他类来执行简单的字符串插值:
<%= link_to "All Posts", posts_path, class: "#{cp(posts_path)} additional_class" %>
Run Code Online (Sandbox Code Playgroud)
rde*_*an1 18
在我的情况下,我有很多名称间隔控制器,这就是为什么我喜欢显示当前视图是否也在菜单路径中,我使用了Michael van Rooijen的解决方案然后我自定义我的情况.
def cp(path)
"current" if request.url.include?(path)
end
Run Code Online (Sandbox Code Playgroud)
<%= link_to "All Posts", posts_path, class: cp(posts_path) %>
Run Code Online (Sandbox Code Playgroud)
现在,如果我的菜单栏是/ users,我的当前页面是/ users/10/post,那么链接/用户设置为"当前"类
Eri*_*ehs 10
我对迈克尔的答案进行了分支并调整了帮助:
def active_class?(*paths)
active = false
paths.each { |path| active ||= current_page?(path) }
active ? 'active' : nil
end
Run Code Online (Sandbox Code Playgroud)
这是你如何使用它:
<%= link_to "Bookings", bookings_path, class: active_class?(bookings_path) %>
Run Code Online (Sandbox Code Playgroud)
如果您有一个可以由多个视图呈现的选项卡,您可以传递多个路径:
<%= content_tag :li, class: active_class?(bookings_path, action: 'new') %>
Run Code Online (Sandbox Code Playgroud)
关于这一点的好处是false,如果条件是,它将插入nil.为什么这样好?好吧,如果你提供class与nil它不包括标签上的类属性的.奖金!
为了不必通过一直检查link_to方法内部的 current_page 来重复你自己太多,这里有一个你可以使用的自定义助手(把它放在 app/views/helpers/application_helpers.rb
def link_to_active_class(name, active_class_names, options = {}, html_options = {}, &block)
html_options[:class] = html_options[:class].to_s + active_class_names if current_page?(options.to_s)
link_to name, options, html_options, &block
end
Run Code Online (Sandbox Code Playgroud)
用法示例:
<div> <%= link_to_active_class('Dashboard', 'bright_blue', dashboard_path, class: 'link_decor') </div>
Run Code Online (Sandbox Code Playgroud)
如果你在http://example.com/dashboard,那么它应该返回:
<div> <a href='/dashboard' class='link_decor bright_blue'>Dashboard</a> </div>
Run Code Online (Sandbox Code Playgroud)
问候。