0

名前、評価 1、評価 2、および評価 3 を含める必要がある html テーブルを作成しています。評価 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 に答える