Rails3中的每一个都忽略了nil值



我正在构建一个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>

相关内容

  • 没有找到相关文章

最新更新