Rails,是否可以根据模型列的值更改css?

时间:2013-06-19 15:06:45

标签: css ruby-on-rails ruby ruby-on-rails-3

假设我有一张这样的表:enter image description here

我想根据类型{id1: 'Anamnse', id2: 'Befund', id3: 'Therapie'}设置表格的行的样式。手动我只需添加引导类 enter image description here

我的问题是如何使用ruby自动实现此目的?这是我的代码,用于表格:

 <table id="report" class="table table-striped ">
   <tr>
     <th>Typ</th>
     <th>Beschreibung</th>
     <th>Datum</th>
     <th>     </th>
   </tr>
 <% @patient.treatments.each do |treatment| %>
   <tr>
     <td><%= treatment.category.try(:typ) %></td>
     <td><%= treatment.content %></td>
     <td><%= treatment.day %></td>
     <td><div class="arrow"></div></td>
   </tr>
   <tr>
     <td colspan="5">
       <%=    link_to 'Löschen', [treatment.patient, treatment],
                                  :confirm => 'Sind sie sicher?',
                                  :method => :delete %> 
       <% treatment.paintings.each do |paint| %>                          
         <%= image_tag paint.name.url(:thumb) %>
       <% end %>
     </td>
   </tr>
 <% end %>
 </table>

结论:样式必须取决于

的值
<td><%= treatment.category.try(:typ) %></td>

4 个答案:

答案 0 :(得分:4)

您也可以这样使用辅助方法

<td <%= row_classname(:typ) %> ><%= treatment.category.try(:typ) %></td>

并在您的相关助手

def row_classname(type)
  switch type
    when "somevalue"
      classname = "someclass"
    when "othervalue"
       classname = "otherclass"

   "class=\"#{classname}\"" unless classname.nil?

end

或类似的东西

答案 1 :(得分:3)

您可以定义映射,例如:

category_classes = { "Anamnse" => "success", "Befund" => "warning", "Therapie" => "error" }

并使用此映射分配类:

<% category_classes = { "Anamnse" => "error", "Befund" => "warning", "Therapie" => "success" } %>
<% @patient.treatments.each do |treatment| %>
  <tr class="<%= category_classes[treatment.category.try(:typ)] %>">

您也可以将其作为辅助方法提取,例如在app/helpers/application_helper.rb

def category_table_row_class(category_typ)
  { "Anamnse" => "success", "Befund" => "warning", "Therapie" => "error"}[category_typ]
end

或者改为使用category.id

def category_table_row_class(category)
  { 1: "success", 2: "warning", 3: "error"}[category.id]
end

并称之为:

<tr class="<%= category_table_row_class(treatment.category) %>">

顺便说一句,你应该使用<thead><tbody>作为头部和身体部分。

答案 2 :(得分:2)

请勿尝试动态更改CSS&#34;。这不是CSS的工作方式。相反,有条件地向元素添加一个类,并编写一些针对该类的新CSS。

这样的事情:

<tr class="<%= treatment.category.try(:typ) %>">

答案 3 :(得分:1)

<tr class="<%= treatment.category.try(:typ) %>">

这会将tr类添加到等于typ的值。