Rails ActiveRecord:相同模型之间的两个has_one关系

Pla*_*Ton 1 activerecord ruby-on-rails

我有一个模型,Project,它有2个关联到同一个模型:

belongs_to :source_connection, class: Connection
belongs_to :destination_connection, class: Connection
Run Code Online (Sandbox Code Playgroud)

这工作正常 - 我可以通过项目访问连接方法没有任何问题.

不过,我对如何做反向感到有些困惑.我开始时相当乐观:

has_one :project
Run Code Online (Sandbox Code Playgroud)

在Connection模型上,毫不奇怪,它抛出了一个

ActiveModel::MissingAttributeError: can't write unknown attribute 'connection_id'

我尝试从连接本身访问项目时出错.

如果有人知道如何在连接方面声明关联,我会很感激.干杯.

Ric*_*eck 5

协会

您可能最好查看foreign_keyActiveRecord关联的参数:

#app/models/project.rb
Class Project < ActiveRecord::Base
   belongs_to :source_connection, class: "Connection", foreign_key: "source_connection_id"
   belongs_to :destination_connection, class: "Connection", foreign_key: "destination_connection_id"
end

#app/models/connection.rb
Class Connection < ActiveRecord::Base
   has_many :projects, foreign_key: "source_connection_id"
end
Run Code Online (Sandbox Code Playgroud)

您遇到的问题是,由于您没有foreign_key在关联中使用该选项,因此Rails将foreign_key在您的架构中寻找标准关联(通常model_name_id).

-

错误

无法写入未知属性'connection_id'

我不知道它为什么抱怨写作,但原因很可能是你没有为你的协会设置正确的外键.通常情况下,Rails会寻找model_name_id- 但由于你不是,你需要在你的模型中设置相对键(如图所示)