在管理非政府组织成员和捐赠者的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
- 无济于事。
怎么办?
答案 0 :(得分:0)
解决方案是将foreign_key
参数放在Member
类中:
class Member < Friend # This is STI!
has_one :membership, foreign_key: 'friend_id'
...
end
换句话说,如果要使用has_one
调用添加的方法,则在保存外键的类中指定外键是不够的。