Rails 3每个都忽略nil值

时间:2013-02-06 13:13:53

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

我正在构建一个应该包含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 %>

必须有一种更简单的方法。

2 个答案:

答案 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>