2015-05-22 61 views
1

我相信這是一個非常基本的問題,我見過相關的問題,但我仍然感到困惑。我對RoR很缺乏經驗 - 請原諒我的無知!如何正確讓rails重載belongs_to關聯中的foreign_key命名?

我已經在遺留數據庫上使用腳手架設置了mvc類(通過schema_to_scaffold)。當我打開schema.rb我可以看到,主鍵都與他們的非默認的名稱被正確識別,例如:

create_table "my_ncs", primary_key: "ID_NC", force: true do |m| 

    # etc... 

end 

create_table "my_revisions", primary_key: "ID_REVISION", force: true do |m| 
    m.decimal "ID_NC", precision: 10, scale:0, null: false 

    # etc ... 

end 

有一個"my_nc"和相關"my_revisions"之間的一個一對多的關係。 (即混淆了我的第一件事情是,相應的模型文件MyNcMyRevision不顯示我的預期:self.primary_key='ID_NC'self.primary_key='ID_REVISION'不過沒關係)

現在我試圖建立這種關係,並嵌套路由是能夠有一個網址就像說/my_ncs/6/my_revisions給我所有的my_revisionsmy_ncID_NC=6

這是我正在努力做到這一點:

class MyNc < ActiveRecord::Base 
    has_many :MyRevisions 
end 

class MyRevision < ActiveRecord::Base 
    belongs_to :MyNc, foreign_key: 'ID_NC' 
end 

現在我試圖用rails console來測試這一點,這是當我完全糊塗了

irb(main):001:0> n = MyNc.find(6) 
    MyNc Load (0.0ms) SELECT `my_ncs`.* FROM `my_ncs` WHERE `my_ncs`.`ID_NC` = 6 LIMIT 1 
=> #<MyNc ID_NC: 6, etc...> 

irb(main):002:0> n.MyRevisions 
    MyRevision Load (22.0ms) SELECT `my_revisions`.* FROM `my_revisions` WHERE `my_revisions`.`my_nc_ 
id` = 6 
Mysql2::Error: Unknown column 'my_revisions.my_nc_id' in 'where clause': SELECT `my_revisions`.* FROM `my 
_revisions` WHERE `my_revisions`.`my_nc_id` = 6 

使用foreign_key的默認名稱my_nc_id,而不是ID_NC

我在做什麼錯?

很多人提前致謝!

+1

請使用Ruby命名約定! – BroiSatse

+0

像我這樣的其他新手請閱讀@ marek-lipka的回答瞭解BroiSatse的評論:-) – lmtanco

回答

2

你也應該在has_many協會指定foreign_key

class MyNc < ActiveRecord::Base 
    has_many :my_revisions, foreign_key: 'ID_NC' 
end 
class MyRevision < ActiveRecord::Base 
    belongs_to :my_nc, foreign_key: 'ID_NC' 
end 

注意,我改變了你的名字的關聯,使他們遵循Ruby的約定。

+0

非常感謝!現在一切正常! :-) – lmtanco

相關問題