自分のコードで自己参照関連付けを作成する際に問題があります。一般的に私は様々なワークショップのカテゴリがあり、そのカテゴリには別のカテゴリが必要な場合があります(2番目に登録するには最初のカテゴリを終了する必要があります)。私は私のモデルについては、以下のコードを持っている:自己結合されたRailsテーブルでは、一方向の関連付けのみを追加できます
class WorkshopCategory < ApplicationRecord
has_many :category_requirements, foreign_key: 'category_id', class_name: 'CategoryRequirement'
has_many :requirements, through: :category_requirements
end
class CategoryRequirement < ApplicationRecord
belongs_to :category, foreign_key: 'category_id', class_name: 'WorkshopCategory'
belongs_to :requirement, foreign_key: 'requirement_id', class_name: 'WorkshopCategory'
end
とそのテーブルのマイグレーションを次
class CreateWorkshopCategories < ActiveRecord::Migration[5.0]
def change
create_table :workshop_categories do |t|
# some fields for workshop_categories
end
end
end
class CreateCategoryRequirements < ActiveRecord::Migration[5.0]
def change
create_table :category_requirements do |t|
t.integer :category_id, index: true
t.integer :requirement_id
end
end
end
私はいくつかの種を作成し、私は次のような問題があります。
WorkshopCategory.find(2).requirements.create(requirement_id: 1)
結果ではエラー 'ActiveModel :: UnknownAttributeError:不明な属性' requirement_id 'for WorkshopCategory'。
中:次に
CategoryRequirement.create(category_id: 2, requirement_id: 1)
が作品適切とWorkshopCategory.find(2)も適切にその要件として、ID 1のWorkshopCategoryを返し.requirements。
私は初心者ですが、両方の方法が正しく動作するはずです。はいの場合、私のコードに何が問題なのですか?なぜWorkshopCategory.find(2).requirements.create()がCategoryRequirementではなくWorkshopCategoryモデルで動作するのですか?
は、あなたのカテゴリと要件のクラスを追加します。 – hashrocket
私はそのようなクラスを持っていません、命名時の指定は私のコードの他のクラスによって指示されますが、まだ依存関係はありません。 "WorkshopCategory"をCategory.rb、 "CategoryRequirement"を "Requirement.rb"として扱うことができます – bochen421
どのガイドを使用していますか? – hashrocket