我有几个部分 - 一个用于主菜单,另一个用于子菜单等。
我想了很久的一件事。我知道如何突出显示活动菜单项,但请看一下这个例子:
ul.menu-list
li
- if action_name == 'change_password'
a.is-active href="/#{session[:user_type]}/account/change_password" Change Password
- else
a href="/#{session[:user_type]}/account/change_password" Change Password
li
- if action_name == 'change_cell'
a.is-active href="/#{session[:user_type]}/account/change_cell" Update Contact Number
- else
a href="/#{session[:user_type]}/account/change_cell" Update Contact Number
li
- if action_name == 'change_email'
a.is-active href="/#{session[:user_type]}/account/change_email" Update Email
- else
a href="/#{session[:user_type]}/account/change_email" Update Email
li
- if action_name == 'change_notifications'
a.is-active href="/#{session[:user_type]}/account/change_notifications" Update Notification Settings
- else
a href="/#{session[:user_type]}/account/change_notifications" Update Notification Settings
这是一个疯狂的if / else节日。某些操作按钮(编辑窗口小部件,删除窗口小部件)仅对某些用户类型可用。这将为你在这里看到的东西增加另一层荒谬的复杂性。
我在这里做错了什么?
答案 0 :(得分:0)
只需将逻辑放入查看助手即可。例如:
module MyHelper
ACTION_TO_STRING = {
change_password: 'Change Password',
change_cell: 'Update Contact Number',
change_email: 'Update Email',
change_notifications: 'Update Notification Settings'
}
def menu_list_from(action_name, user_type)
content_tag(:ul, class: 'menu-list') do
ACTION_TO_STRING.each do |k, v|
klass = k == action_name.to_sym ? 'is-active' : ''
concat content_tag(:li) do
link_to v, "/#{user_type}/account/#{k}", class: klass
end
end
end
end
end
然后在你的视图中使用它
= menu_list_from(action_name, session[:user_type])