2015-06-14 47 views
1

說我定義了此模型和關聯的模式。如何更改保存另一個模型的對象的導軌模型對象變量名稱

class Memory < ActiveRecord::Base 
    belongs_to :memory_slot 
end 

class MemorySlot < ActiveRecord::Base 
    has_many :memories 
end 

現在通常它讓我可以通過@memory.memory_slot.name存取內存內存插槽。但我想通過不同的方法訪問它,如@memory.supporting_memory_slot.name。我能做到的最好方法是什麼?

回答

3

您將不再需要任何新的遷移,你可以使用以前memory_slot_id,仍然可以更改名稱類似以下內容:

class Memory < ActiveRecord::Base 
    belongs_to :supporting_memory_slot, class_name: 'MemorySlot', foreign_key: 'memory_slot_id' 
end 

class MemorySlot < ActiveRecord::Base 
    has_many :memories 
end 

這樣一來,如果您有任何記錄之前保存的,他們將在工作當前的情況也是如此。但是,如果您生成新遷移,則保存的舊記錄將無法訪問,因爲它們的使用使用foreign_key作爲memory_slot_id

2

如果你可以改變你的model association這樣

class Memory < ActiveRecord::Base 
    belongs_to :supporting_memory_slot, :class_name => 'MemorySlot', :foreign_key => 'supporting_memory_slot_id' 
end 

那麼你可以做這樣的事情

@memory.supporting_memory_slot.name 

注:在這種情況下,你必須生成一個新的migration到將supporting_memory_slot_id加入您的memories

+1

謝謝多數民衆贊成我正在尋找:) – sadaf2605

+0

他可以只指向外存memory_slot_id,像'foreign_key:memory_slot_id'? – caspg

+0

@caspg不! Rails總是將'(model_name)_id'查找爲** FK **。在這種情況下,它是'supports_memory_slot_id',因爲'model_name'是'supports_memory_slot' – Pavan

相關問題