课程和可用性是具有has_one关联的ActiveRecords。我确保他们的数据库表具有彼此的_id作为列。在控制台中,我可以毫无问题地访问Availability.first.lesson
和Lesson.first.availability
。但是,当我编写以下装置时,最终得到的是ActiveRecord::Fixture::FixtureError: table "lessons" has no column named "availability"
。灯具的标记引用功能可以与belongs_to
配合使用,我希望它可以与has_one以相同的方式一起使用。我该如何运作?
#availabilities.yml
availability1:
lesson: lesson1
#lessons.yml
lesson1:
availability: availability1
答案 0 :(得分:0)
即使ActiveRecord允许您在“可用性”模型上设置has_one关联时访问Availability.first.lesson
,但支持该关联的数据库迁移也不会期望“可用性”具有任何与课程相关的列。
来自https://guides.rubyonrails.org/association_basics.html#the-has-one-association:
因此,labeled references feature of Fixtures仅适用于具有belongs_to关联且不适用于has_one或has_many的模型。
这不是一个答案,我希望Rails专家对引擎盖进行更详细的解释。
答案 1 :(得分:0)
要添加到@allenylzhou的答案,之所以只能在belongs_to
关联上使用,是因为关联的标签引用取决于外键,而外键始终位于带有{{1 }}关联。
From https://api.rubyonrails.org/v5.2.2/classes/ActiveRecord/FixtureSet.html
在灯具中指定外键可能非常脆弱,更不用说很难阅读了。由于Active Record可以从其标签中找出任何灯具的ID,因此您可以按标签而不是ID指定FK。
具有外键的模型中始终使用
belongs_to
关联。