2011-01-24 63 views
0

我更改了兩個類通過這種方式變化不是模型中未添加方法的類

class Account < ActiveRecord::Base 
     belongs_to :customer,:foreign_key=>'name_id' 
    end 

    class Customer < ActiveRecord::Base 
     has_many :accounts 
    end 

我有,在客戶和「具有的引用鍵「名」兩個表中的數據將它們連接name_id'在帳戶匹配。不過還是當我去「腳本/控制檯」並鍵入

     Account.find(0).customer 

我得到即使有匹配的數據!我在這裏犯了什麼錯誤?對不起,如果它是一個愚蠢的問題,我是新來的鐵軌

回答

1

讓我按你的意見思維希亞姆。添加自定義密鑰時,是否有自己的遷移文件中的字段,或者當您第一次運行db時是否包含在遷移文件中:遷移?如果這些列已經存在,那麼是的,只需保存模型就可以做到這一點。

您可以在您的rails控制檯中快速執行:AccountCustomer,以確保這些類是正確構建的,並且它是爲您提供問題的關係。

在附註上,我儘量避免使用「name」作爲主鍵。這是不好的設計,會導致你頭痛的道路。這不僅僅是一個鐵軌的事情,只是想一想,約翰史密斯在電話簿裏有多少人?然後您必須使用帶地址的組合鍵,也許還需要使用組合鍵才能獲得唯一的行。如果你仔細想想,電話本有一個唯一的電話號碼作爲標識符,它只是按名字排序。

+0

我最好遵循以下約定:D – theReverseFlick 2011-01-24 09:46:38

0

如果我理解正確,我認爲你需要設置:foreign_key:primary_key兩個關聯。

class Account < ActiveRecord::Base 
    belongs_to :customer,:foreign_key=>'name_id', :primary_key=>'name' 
end 

class Customer < ActiveRecord::Base 
    has_many :accounts, :primary_key=>'name', :foreign_key=>'name_id' 
end 
+0

仍然無法正常工作,如果我只保存模型文件就足夠了嗎?因爲我沒有看到更改反映在控制檯 – theReverseFlick 2011-01-24 05:31:06

0

你真的應該是繼Rails的約定:在您的accounts表的外鍵應該是customer_id。改變它可以解決你遇到的問題。

0

主鍵從1開始,嘗試:Account.find(1).customer