1

我在MYSQL中使用了一些打開的gov數據,我已經導入到我的rails應用程序中。ActiveRecord雙向外鍵。

我已經用我自己的一些表擴展了數據庫,並在我的表中使用rails提供的列id。

但是,原始數據庫的表通過唯一的'ndb'id鏈接。

我認爲通過在兩個模型之間交叉引用兩個:foreign_key=>'ndb'我會得到正確鏈接表,但通過:foreign_key,它似乎將一個表的id鏈接到另一個表的ndb列。

我的模型看起來像這樣

 
class Food < ActiveRecord::Base 
has_many :weights, :foreign_key=>'ndb' 
has_many :food_names 
end 

class Weight < ActiveRecord::Base 
belongs_to :food, :foreign_key=>'ndb' 

是否有指定的「NDB」欄中,而不是食品和權重表之間的聯繫,將food_id到NDB的方法嗎?

回答

0

我作爲一個可能的臨時解決方案所做的工作是使用:finder_sql將錶鏈接在一起。

我的食物模型現在有:

 
class Food < ActiveRecord::Base 
    has_many :weights, :finder_sql =>'Select weights.* FROM weights LEFT JOIN foods ON foods.ndb=weights.ndb WHERE foods.id=#{id}' 

我不知道這是否是最好的解決辦法或不是,但它似乎是工作。

0

您是否在AR類中嘗試過set_primary_key 'ndb'

set_primary_key docs。

+0

我還沒有嘗試過,但我仍然需要在其他查詢中使用_id字段,因爲並非所有東西都通過'ndb'字段鏈接,這就是我的意思是'擴展數據庫以使用我的一些自己的表',所以70%的時間,我使用標準的軌道ID,但有時我需要鏈接'ndb到NDB' – pedalpete 2011-04-19 17:59:00

+0

那麼,使用set_primary_key爲那些需要它的表將是一個開始,讓事情像find()一樣工作。它還會設置關聯的默認值。 – noodl 2011-04-19 18:05:12

+0

對不起,也許我不清楚。對於像食物表這樣的東西,我使用id字段70%的時間(堅持使用rails標準),另外30%的時間使用id字段,我需要將食物錶鏈接到另一個表,如通過ndb字段的重量。在模型上設置set_primary_key會打破這些關係的70%。除非我錯過別的東西。一旦我設置'ndb'作爲主鍵,我似乎無法將兩個帶ID的表連接到food_id – pedalpete 2011-04-19 18:46:27