HAML:tr [@user]转换为类和ID,但是如何?

时间:2013-03-18 13:14:17

标签: ruby-on-rails haml

众所周知,HAML翻译tr[@user]<tr class="user" id="user_123">...。但它是如何实现这一目标的呢?通过一些内在的魔力?或者使用@user对象的某些功能?

我想要实现的目标如下。我有Contact模型,其中包含CompanyPerson子类。现在使用tr[@company]时,我希望HAML执行以下操作:

<tr class="contact company" id="company_123">

...而不仅仅是:

<tr class="company" id="company_123">

有没有简单的方法来实现这一目标?

谢谢。

1 个答案:

答案 0 :(得分:1)

您可以在模型中实施haml_object_ref方法,以覆盖Haml用作class属性值的方法。

如果你只使用Contact的直接子类,那么简单的东西应该适用于Contact模型:

def haml_object_ref
  "#{self.class.superclass.to_s.underscore} #{self.class.to_s.underscore}"
end

(这使用ActiveSupport underscore方法。)

如果您想直接使用Contact个实例,或PersonCompany的子类,您可以执行以下操作:

def haml_object_ref
  classes = []
  klass = self.class
  while klass <= Contact
    classes << klass
    klass = klass.superclass
  end
  classes.map{|c| c.to_s.underscore}.join(' ')
end

这将为class="contact"的实例生成Contactclass="contact person'的实例为Personclass="contact person employee"为{假设的Employee Person } {{1}}的子类。