1

Harvest からデータを取得しています。これが私の 2 つのモデルとスキーマです。

# schema
create_table "clients", :force => true do |t|
  t.string   "name"
  t.integer  "harvest_id"      
end

create_table "projects", :force => true do |t|
  t.string   "name"
  t.integer  "client_id"
  t.integer  "harvest_id"
end

# Client.rb
has_many :projects, :foreign_key => 'client_id' # not needed, I know

# Project.rb
belongs_to :client, :foreign_key => 'harvest_id'

Project.client_idをClient.harvest_idに一致させることで、プロジェクトにクライアントを見つけさせようとしています。これが私が代わりに得ているものです。

> Project.first.client_id
=> 187259

Project.first.client
=> nil

Client.find(187259).projects
=> []

これは可能ですか?ありがとう!

4

3 に答える 3

0

直感的ではないように思えるかもしれませんが、両方のリレーションのforeign_key は同じでなければなりません。Harvest_id を外部キーとして使用することにしたとしましょう。次のように設定する必要があります。

# Client.rb
has_many :projects, :foreign_key => 'harvest_id'

# Project.rb
belongs_to :client, :foreign_key => 'harvest_id'

また、クライアントには多数のプロジェクトがあるため、projects テーブルには Harvest_id フィールドしかありません。

于 2010-03-11T05:47:34.790 に答える