0

皆さん、こんにちは。

レールの初心者であることを許してください。

だからここに私の質問があります。

だから私は以下に定義されたカテゴリモデルと旅程モデルを持っています

class Category < ActiveRecord::Base
  has_many :categorizations, :dependent => :destroy
  has_many :itineraries, :through => :categorizations
end

class Itinerary < ActiveRecord::Base
  has_many :categorizations
  has_many :categories, :through => :categorizations
end

したがって、私の見解では、グループで旅程を表示するためにカテゴリをループしています。

<% @categories.each do |category| %>
<table>
  <thead>
    <tr>
      <th colspan="4"><%= category.name %></th>
    </tr>
  </thead>
  <tbody>
    <% category.itineraries.each do |itinerary| %>
      <tr>
        <td><%= itinerary.name %></td>
        <td><%= link_to 'Show', itinerary %></td>
        <td><%= link_to 'Edit', edit_itinerary_path(itinerary) %></td>
        <td><%= link_to 'Destroy', itinerary, method: :delete, data: { confirm: 'Are you sure?' } %></td>
      </tr>
    <% end %>
  </tbody>
</table>
<% end %>

まだ分​​類されていない旅程をどのように表示すればよいのでしょうか。私は周りを検索して、モデルでスコープを使用することが道になることを発見しました。

scope :without_categories, -> { includes(:categorizations).where( :categorizations => { :itinerary_id => nil } )}

もう一度反復するために別のテーブルを作成する必要があるため、あまり「DRY」ではありませんitinerary.without_categories

categories.allアイテムを含むすべてを表示するような方法でコーディングできる方法はありuncategorizedますか?

ありがとうございました。

更新 #1

これをコントローラーで使用することにしました。これにより、インデックス アクションで新しい「未分類」カテゴリが構築され、配列に追加されます。

def index
  uncategorized = Category.new
  uncategorized.name = "Uncategorized";
  uncategorized.itineraries = Itinerary.without_categories
  @categories = Category.all << uncategorized
end

レールでは、コントローラーは可能な限り細くする必要があることを私は知っています。しかし、私はより良い方法を考えることができません。

より良い答えをお持ちの方は、お気軽に共有してください。ありがとう!:)

4

1 に答える 1