0

私のアプリには、次のモデルがあります: ListItemおよびCategory

各項目belong_toのリスト。各項目belongs_toのカテゴリ。

また、アイテムの各リストは、何らかの方法で複数のカテゴリに関連付ける必要があります。つまり、ユーザーがカテゴリを作成すると、カテゴリが作成されたときにユーザーが作業していたリストlist_idと同じ割り当てが割り当てられます。idそうすれば、ユーザーがリストを削除することを決定したときに、そのリスト用に作成されたすべてのカスタム カテゴリを削除することもできます。問題は、いくつかの「デフォルト」のカテゴリ、つまりすべてのリストで使用できるカテゴリも作成したいということです。listsとの間の関係をモデル化する方法がわかりませんcategoriesbelongs_to「デフォルト」カテゴリは実際には特定のリストに属しておらず、すべてのリストに属しているため、私にとってはうまくいきません。

そのような関係を処理する方法についての提案をいただければ幸いです。

4

2 に答える 2

0

カテゴリモデルとリストモデルに多対多の関係を設定する必要があります。それをするためにこれはあなたがすることです

class List < ActiveRecord::Base
  has_many :categorizations, dependent: :destroy
  has_many :categories, :through => :categorize
end

class Categorization < ActiveRecord::Base
  belongs_to :category
  belongs_to :list
end 

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

class Item < ActiveRecord::Base
  belongs_to :category
  belongs_to :list
end

これにより、すべてのモデル間の関係を追跡するための3番目のテーブルが作成されます。ライアンベイツは、おそらくあなたがチェックする必要があるこの主題に関する素晴らしいレールキャストを持っています。

次に、dependent: :destroy1つが削除された場合は関係も削除され、他のカテゴリがそのリストから削除されたことを確認するには、before_destroyまたはafter_destroyメソッドを使用できます。

于 2012-09-21T19:57:00.727 に答える
0

-関係has_manyの両側に必ず関係が必要です。 CategoryList

カテゴリモデル内の定数に「デフォルト」であるカテゴリ名を保持するか、カテゴリにブール属性を持たせて、削除するかどうかを知ることができます。

after_destroyリストが削除されたときにカテゴリを削除するには、おそらくList モデルでコールバックとして実行されるカスタム メソッドを作成する必要があります。

于 2012-09-21T19:07:14.410 に答える