皆さん、こんにちは。
レールの初心者であることを許してください。
だからここに私の質問があります。
だから私は以下に定義されたカテゴリモデルと旅程モデルを持っています
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
レールでは、コントローラーは可能な限り細くする必要があることを私は知っています。しかし、私はより良い方法を考えることができません。
より良い答えをお持ちの方は、お気軽に共有してください。ありがとう!:)