我正在构建一个应该包含name,rating1,rating2和rating3的html表。等级1-3来自不同的型号而不是名称。
resources :names do
resource :rat1,:rat2,:rat3
end
在我的html表中,我想在每个表中包含评级,但我想自动跳过或忽略nil表。这是因为:名称可能只有:rat1而不是:rat2或:rat3。我的观点应该是这样的。
<table>
<thead>Name</thead>
<thead>Rating 1</thead>
<thead>Rating 2</thead>
<thead>Rating 3</thead>
<% @names.each do |name| %>
<tr>
<td><%= name.nametext %></td>
<td><%= name.rat1.rating %></td>
<td><%= name.rat2.rating %></td>
<td><%= name.rat3.rating %></td>
</tr>
<% end %>
</table>
除非如果name.rat1为nil,它将a。)用N / A或b替换该值。)它将该字段留空并继续下一个。
最干净的方法是什么?
:: UPDATE ::
所以我的问题是name.rat1是nil而name.rat1.rating是一个未定义的nil类方法,所以这两个选项都将抛出nil类错误的相同未定义方法,而不管||或辅助方法。至少那是我目前的测试所显示的。还有其他选择吗?或不同的解决方法?我想避免为每个rat1-3设置这样的验证循环
<% unless name.rat1.nil? %>
<%= name.rat1.rating %>
<% end %>
必须有一种更简单的方法。
答案 0 :(得分:5)
我可能会在names_helper.rb中创建一个帮助方法
def show_rating(rating)
if rating.present?
rating
else
"default value"
end
end
然后在视图中使用它:
<%= show_rating name.rat1.rating %>
答案 1 :(得分:3)
OFFTOPIC 您的表格结构错误。它应该有<thead><tr><th>Name</th><th>Rating1</th>..so on..</tr></thead>
因此,在您的情况下,您可以在将评级值呈现为:
时使用条件<table>
<thead>
<tr>
<th>Name</th>
<th>Rating 1</th>
<th>Rating 2</th>
<th>Rating 3</th>
</tr>
</thead>
<tbody>
<% @names.each do |name| %>
<tr>
<td><%= name.nametext %></td>
<td><%= name.rat1.rating || 'N/A' %></td>
<td><%= name.rat2.rating || 'N/A' %></td>
<td><%= name.rat3.rating || 'N/A' %></td>
</tr>
<% end %>
</tbody>
</table>