我有一个链接,代码如下:
= link_to 'Payment', account_payment_path, class:{'active'}
我想在视图中添加一个条件逻辑,所以如果action_name
相同,那么添加类active
然后我改为以下代码
= link_to 'Payment', account_payment_path, class:{'active' if action_name == 'payment'}
但会导致错误。我该如何解决呢?
答案 0 :(得分:5)
如果你想获得活动链接,那么active_link_to有一个gem构建,你可以像这样使用它,它会处理为你添加活动类:
=active_link_to 'Payment', account_payment_path
您的问题可以使用:
= link_to 'Payment', account_payment_path, class: (action_name == 'payment' ? 'active' : '')
答案 1 :(得分:1)
试试这个......
= link_to 'Payment', account_payment_path, :class => action_name == 'payment' ? 'active' : ''
希望这会对你有所帮助。
答案 2 :(得分:0)
我参加聚会很晚,但是我认为这是更灵活的选择,即可以与任何HTML标签一起使用,无论是a
,li
还是其他任何东西。
# app/helpers/menu_helper.rb
module MenuHelper
class MenuBuilder
def initialize(template, active_class_name, active_value)
@template = template
@active_class_name = active_class_name
@active_valule = active_value
end
def item(value)
contents = @template.capture { yield }
return contents unless value == @active_value
body = Nokogiri::HTML.parse(contents).at('body')
# Method :+= does not always work because body.child['class'] could be nil
body.child['class'] = "#{body.child['class']} #{@active_class_name}"
body.inner_html.html_safe
end
end
def menu_for(active_class_name, active_value)
capture { yield MenuBuilder.new(self, active_class_name, active_value) }
end
end
Rails自动加载该帮助程序,以便您可以在视图中使用它:
# app/views/shared/_left_sidebar.html.slim
aside
.menu
ul.list
= menu_for 'active', yield(:sidebar_menu_l1_active_value) do |m|
= m.item 'menu-1'
li = link_to 'Menu 1', '#'
= m.item 'menu-2'
li = link_to 'Menu 2', '#'
-
# app/views/home/index.html.slim
- content_for :sidebar_menu_l1_active_value, 'menu-1'
...