标记为has_one的Rails 5夹具参考不起作用

时间:2018-12-17 04:10:13

标签: ruby-on-rails ruby-on-rails-5 integration-testing fixtures

课程和可用性是具有has_one关联的ActiveRecords。我确保他们的数据库表具有彼此的_id作为列。在控制台中,我可以毫无问题地访问Availability.first.lessonLesson.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

2 个答案:

答案 0 :(得分:0)

即使ActiveRecord允许您在“可用性”模型上设置has_one关联时访问Availability.first.lesson,但支持该关联的数据库迁移也不会期望“可用性”具有任何与课程相关的列。

来自https://guides.rubyonrails.org/association_basics.html#the-has-one-associationenter image description here

因此,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。

From API dock

  

具有外键的模型中始终使用belongs_to关联。