Rails 3 - 帮助查看,动态html attr?

时间:2011-07-29 05:53:01

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

现在,我在视图中有一个针对任务模型的do循环:

<% @tasks.each do |t| %>
  <div class="task purple">
    <%= link_to t.name, edit_task_path(t) %>
  </div>
<% end %> 

我需要一些帮助,因此div类根据我的模型数据进行更改。我试过这样做:

   <% @tasks.each do |t| %>
      <div class="task " + t.theme>
        <%= link_to t.name, edit_task_path(t) %>
      </div>
    <% end %> 

但那失败了。然后我读了内容标签,并尝试了类似的东西:

content_tag(:div, :class => t.theme){<%= link_to t.name, edit_task_path(t) %>}

在循环中但是它将其呈现为文本。

无论如何,只需要一些帮助,学习如何根据模型数据更改html标签属性?这是我要建立一个视图助手吗?

由于

2 个答案:

答案 0 :(得分:2)

<% @tasks.each do |t| %>
  <div class="task <%= t.theme %>">
    <%= link_to t.name, edit_task_path(t) %>
  </div>
 <% end %> 

答案 1 :(得分:2)

您的第一种方法无效的原因是您没有包含ERb标记(<%= %>)以从t.theme输出返回值。为了使其显示在输出中,您需要执行以下操作:

<% @tasks.each do |t| %>
  <div class="task <%= t.theme%>">
    <%= link_to t.name, edit_task_path(t) %>
  </div>
<% end %> 

请记住:ERb对HTML一无所知,它只扫描整个文件中的<% %><%= %>标记,并评估其中的ruby代码。

content tagwork the way you've got it there,但我宁愿将标记的内容作为第三个参数传递而不是使用块(我假设您使用的是Rails 3,语法略有不同以前的版本):

<% @tasks.each do |t| %>
  <%= content_tag :div, 
                  :class => "task #{t.theme}", 
                  link_to(t.name, edit_task_path(t)) %>
<% end %>