0

このような質問はたくさんありますが、特定の質問に答えているように見える質問は見つかりません。これが繰り返しの場合はお詫びします。

私はモデルを持っています。それをサメと呼びましょう。非常に単純な定義です(ここでは、注釈が付けられています:)

# == 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への外部キーである必要があります。アイデアは、すべてのエントリがその関係にある可能性があるか、そうでない場合は、このの「発信者」である別のオブジェクトを指す可能性があるということです。(「オリジネーター」によって、私はこれの以前のインスタンスを参照しています-私を信じてください、これはより多くの背景で理にかなっています。)nullSharkSharkShark

残念ながら、これは機能していないようです。

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代わりに、のオブジェクトを返すようにするにはどうすればよいですか?

ありがとう!

4

2 に答える 2

2

これを試して。わたしにはできる

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

このドキュメントは、AR の関連付けとオプションに非常に役立ちます ;)

于 2012-06-26T23:13:07.313 に答える
1

以下を試してください:

class Shark < ActiveRecord::Base
  belongs_to : creator, class_name: "Shark", foreign_key:"shark_id"
  attr_accessible :origination_entry
end
于 2012-06-26T22:54:35.477 に答える