现在,我在视图中有一个针对任务模型的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标签属性?这是我要建立一个视图助手吗?
由于
答案 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 tag
应work 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 %>