0

我正在构建一个 html 表,其中应包含名称、等级 1、等级 2 和等级 3。评级 1-3 来自与名称不同的型号。

resources :names do
  resource :rat1,:rat2,:rat3
end

在我的 html 表中,我想在每个表中包含评级,但我想自动跳过或忽略 nil 的表。这是因为 :names 可能只有 :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.) 它将将此字段留空并继续下一个。

最干净的方法是什么?

::更新::

所以我的问题是 name.rat1 是 nil 并且 name.rat1.rating 是 nil 类的未定义方法,所以这两个选项都会抛出相同的 nil 类错误的未定义方法,而不管 || 或辅助方法。至少这就是我目前的测试所显示的。还有其他选择吗?或不同的解决方法?我想避免为每个 rat1-3 放置一个这样的验证循环

<% unless name.rat1.nil? %>
  <%= name.rat1.rating %>
<% end %>

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

4

2 回答 2

5

我可能会在 names_helper.rb 中创建一个辅助方法

def show_rating(rating)
  if rating.present?
    rating
  else
    "default value"
  end
end

然后在视图中使用它:

<%= show_rating name.rat1.rating %>
于 2013-02-06T13:23:13.197 回答
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>
于 2013-02-06T13:28:17.713 回答