以下のように3つのモデルを作成し、それらの間に関連を作成するために繭のネストされたフォームを使用しました。保存されていないレコード間の関連付けを作成する方法
class Unit < ApplicationRecord
has_many :mapping_categories, -> { distinct }, dependent: :destroy, inverse_of: :unit
accepts_nested_attributes_for :mapping_categories,
allow_destroy: true,
reject_if: :all_blank
end
class MappingCategory < ApplicationRecord
belongs_to :unit
has_many :mapping_items, -> { distinct }, dependent: :destroy, inverse_of: :mapping_category
accepts_nested_attributes_for :mapping_items,
allow_destroy: true
end
class MappingItem < ApplicationRecord
belongs_to :mapping_category
has_many :mapping_item_links
has_many :linked_mapping_items, through: :mapping_item_links, dependent: :destroy
end
各mapping_itemは、ジョイントテーブルを介して他の多くのマッピング項目を持つことができます。単位形式のすべてのmapping_itemセクションでは、この関連付けが選択入力として表示されます。
Unitを作成または更新するとき、Unitフォームには多くのmapping_categoriesタブがあり、各mapping_categoryセクションには多くのmapping_itemsセクションがあります。
たとえば、マッピングカテゴリAとマッピングカテゴリBがあります。マッピングカテゴリ1にマッピング項目1を、マッピングカテゴリBにマッピング項目2を追加したいと思います。問題は次のとおりです。マッピング項目1これら2つのアイテムはまだ保存されていないので、アイテム2をマッピングしていますか? ありがとうございます。
右のネストに把握する必要がありinverse_of'を 'has_many'の関連付けごとに使用します。そうしないと保存は機能しません(' belongs_to'はデフォルトでレール5に必要とされ、自動的に関連付けを持つことはできません)。 – nathanvda