属于同一模型的基本Rails设计

时间:2012-06-26 22:50:33

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

有很多这样的问题,但我找不到一个似乎回答具体问题的问题 - 如果这是重复的话,道歉。

我有一个模型,我们称之为Shark,定义非常简单(这里注释:)

# == Schema Information
#
# Table name: sharks
#
#  id                :integer         not null, primary key
#  created_at        :datetime        not null
#  updated_at        :datetime        not null
#  origination_entry :integer
#

class Shark < ActiveRecord::Base
  belongs_to :originator, class_name: "Shark", foreign_key:"id"
  attr_accessible :origination_entry
end

具体来说,数据库中的“origination_entry”列应该是外键,返回同一个表,Sharks。我们的想法是,每个条目在该关系中可能有null,否则它将指向另一个Shark对象,该对象是此Shark的“发起者”。 ('发起者',我指的是此Shark的先前实例 - 相信我,这对于更多背景来说是有意义的。)

不幸的是,这似乎不起作用。

irb(main):001:0> shark1 = Shark.new(idnumber:"foo")
=> #<Shark id: nil, idnumber: "foo", created_at: nil, updated_at: nil, origination_entry: nil>
irb(main):002:0> shark1.save()
=> true
irb(main):003:0> 
irb(main):004:0* shark2 = Shark.new(idnumber:"foo", origination_entry:shark1.id)=> #<Shark id: nil, idnumber: "foo", created_at: nil, updated_at: nil, origination_entry: 3>
irb(main):005:0> shark2.save()
=> true
irb(main):006:0> shark2
=> #<Shark id: 4, idnumber: "foo", created_at: "2012-06-26 22:35:19", updated_at: "2012-06-26 22:35:19", origination_entry: 3>
irb(main):007:0> shark2.originator
=> nil

(我剪掉了一些SQL查询,让我知道它们是否有帮助。)

为什么要归还nil?我怎样才能让它返回shark1的对象?

谢谢!

2 个答案:

答案 0 :(得分:2)

试试这个。它对我有用

class Shark < ActiveRecord::Base
   belongs_to :originator, class_name: "Shark", foreign_key:"origination_entry"
   attr_accessible :origination_entry
end

This个文档对AR关联和选项非常有用;)

答案 1 :(得分:1)

尝试以下方法:

class Shark < ActiveRecord::Base
  belongs_to : creator, class_name: "Shark", foreign_key:"shark_id"
  attr_accessible :origination_entry
end