[英]how do I get foreign_key to work in this simple has_many, belongs_to relationship?
我正在從Harvest中獲取數據。 這是我的兩個模型和架構:
# 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
=> []
這可能嗎? 謝謝!
由於您在Project模型中的belongs_to
關系位於harvest_id
,因此必須確保在項目對象中設置了harvest_id
屬性。
> Project.first.harvest_id
=> ??
如果未設置harvest_id
則可能會發生您的問題。
通過匹配項目來找到其客戶的項目。 client_id到一個客戶端。 Harvest_id
這似乎沒有意義,因為客戶和收成應該是不同的對象/記錄,並且您無法將它們匹配。
就像“在有橙色種子的地方找到蘋果”。
因此,我們可能需要更多的上下文。
您通過以下方式定義了關系:
在項目方面,您說“ 它通過client_id
與客戶有關 ”,而在客戶方面,您說“ 它與通過harvest_id
與項目harvest_id
”
那里有差異。
因此,似乎您定義的映射不正確。
不知道應該如何使用Harvest_id,因此將假設它只是關聯:
# Client.rb
has_many :projects
belongs_to :harvest
# Project.rb
belongs_to :client
belongs_to :harvest
# Harvest
has_one :client
has_one :project
可能看起來並不直觀,但是兩個關系的foreign_key必須相同。 假設您決定使用Harvest_id作為外鍵。 應該這樣設置:
# Client.rb
has_many :projects, :foreign_key => 'harvest_id'
# Project.rb
belongs_to :client, :foreign_key => 'harvest_id'
由於客戶端有has_many個項目,因此您也只能在projects表中包含Harvest_id字段。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.