我对外键有这个问题 我希望表大脑中的外键名为the_zombie_id 但是当我去控制台加载数据时。 the_zombie_id不存在
class Zombie < ActiveRecord::Base
attr_accessible :age, :bio, :name
has_one :brain, :foreign_key => 'the_zombie_id'
end
class Brain < ActiveRecord::Base
attr_accessible :flavor, :status, :zombie_id
belongs_to :zombie
end
1.9.3-p547 :034 > brain=Brain.new => #<Brain id: nil, zombie_id: nil, status: nil, flavor: nil, created_at: nil, updated_at: nil>
> 1.9.3-p547 :035 > brain.the_zombie_id NoMethodError: undefined method `the_zombie_id' for #<Brain:0xaa0193c>
答案 0 :(得分:0)
您希望foreign_key不是主键
class Zombie < ActiveRecord::Base
attr_accessible :age, :bio, :name
has_one :brain, :foreign_key => 'the_zombie_id'
end
如果您z.brain
被Zombie
分配给z
答案 1 :(得分:0)
在Zombie模型中,
has_one :brain
你的大脑表中已经有了foreign_key zombie_id
。
在Brain模型中,如果您想使用the_zombie_id
而不是zombie_id
,请添加以下可添加到Brain模型的代码。
alias_attribute :the_zombie_id, :zombie_id
答案 2 :(得分:0)
外键必须始终位于&#34; belongs_to&#34;该协会的一部分。在这种情况下,您的Brain
模型应具有the_zombie_id
属性。
您的模型应如下所示;
class Zombie < ActiveRecord::Base
has_one :brain, :foreign_key => 'the_zombie_id'
end
class Brain < ActiveRecord::Base
belongs_to :zombie, :foreign_key => 'the_zombie_id'
end
由于您的模型不遵循键的命名约定,您必须在两个模型中指定它,但该属性必须在Brain模型中。
请注意,添加foreign_key
选项并不会将字段神奇地添加到数据库表中。您必须通过迁移创建它。