HAML class string with class 基于 if 语句

HAML class string with class based on if statement

我有这个 HAML 代码添加一个 "active" class 基于 if 语句。

= link_to 'Contact Information',
  edit_account_path(:contact_information),
  class: ("active" if params[:section] == 'contact_information')

我还想在 if 语句之外永久添加一串 classes。

类似

= link_to 'Contact Information',
  edit_account_path(:contact_information),
  class: "Tab large", ("active" if params[:section] == 'contact_information')

我需要在不创建辅助方法的情况下执行此操作,因为不允许我过多地编辑代码。

使用ternary operator:

= link_to 'Contact Information',
  edit_account_path(:contact_information),
  class: "Tab large #{params[:section] == 'contact_information' ? 'active' : ''}"

第二个例子:

= link_to 'Contact Information',
  edit_account_path(:contact_information),
  class: current_page?(edit_user_registration_path) ? 'active' : ''

创建辅助方法说 find_classes,

def find_classes(section)
  default_class = ['Tab Large']
  if section == 'contact_information'
    default_class << 'active'
  end
  default_class.join(' ')
end

而且在您看来,

class: find_classes(params[:section])

优点: 您可以有多个 if,也可以附加各种 类。