簡體   English   中英

在這種簡單的has_many,belongs_to關系中,如何使Foreign_key工作?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM