2015-06-14 45 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