我正在构建一个html表,该表应该包括name、rating1、rating2和rating3。评级1-3来自不同的型号而不是名称。
resources :names do
resource :rat1,:rat2,:rat3
end
在我的html表中,我想包括每个表中的评分,但我想自动跳过或忽略为零的表。这是因为:name只能有一个: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替换该值。)它将保留此字段为空,然后继续下一个字段。
做这件事最干净的方法是什么?
::更新::
因此,我的问题是名称.rat1是nil,名称.rat1.rating是nil类的未定义方法,因此无论||或helper方法如何,这两个选项都将抛出nil类错误的相同未定义方法。至少我目前的测试显示了这一点。还有其他选择吗?还是不同的解决方案?我想避免为每个rat1-3 设置这样的验证循环
<% unless name.rat1.nil? %>
<%= name.rat1.rating %>
<% end %>
必须有一个更简单的方法。
我可能会在names_helper.rb 中创建一个helper方法
def show_rating(rating)
if rating.present?
rating
else
"default value"
end
end
然后在视图中使用:
<%= show_rating name.rat1.rating %>
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>