为Rails模型定义外键关系似乎不起作用

时间:2014-10-07 14:30:11

标签: ruby-on-rails ruby-on-rails-3

我对外键有这个问题 我希望表大脑中的外键名为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>

3 个答案:

答案 0 :(得分:0)

您希望foreign_key不是主键

class Zombie < ActiveRecord::Base
  attr_accessible :age, :bio, :name

  has_one :brain, :foreign_key => 'the_zombie_id'
end

如果您z.brainZombie分配给z

,那么当您呼唤大脑时需要{{1}}

答案 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选项并不会将字段神奇地添加到数据库表中。您必须通过迁移创建它。