Rails中的派生模型在关联上使用了错误的外键,为什么?

时间:2016-02-07 18:31:55

标签: ruby-on-rails-4 sti

在管理非政府组织成员和捐赠者的Rails 4.2应用程序中使用STI,我有一个基本模型的朋友......

class Friend < ActiveRecord::Base
  ...
end

...和派生的模特成员,仅为会员提供某些关联,而非为朋友:

class Member < Friend # This is STI!
  has_one :membership
  ...
end

当我建立新会员资格时......

member = Member.new
membership = member.build_membership

...... Rails崩溃:

ActiveRecord::UnknownAttributeError: unknown attribute 'member_id' for Membership.

memberships表包含friend_id,而不是member_id列。

如何让Rails使用正确的friend_id列,而不是不存在的member_id列?

我试过

class Membership < ActiveRecord::Base
  belongs_to :member, foreign_key: 'friend_id'
  ...
end

- 无济于事。

怎么办?

1 个答案:

答案 0 :(得分:0)

解决方案是将foreign_key参数放在Member类中:

class Member < Friend # This is STI!
  has_one :membership, foreign_key: 'friend_id'
  ...
end

换句话说,如果要使用has_one调用添加的方法,则在保存外键的类中指定外键是不够的。