说我已定义此模型和关联模式。
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
之类的不同方法访问它。我能做到的最好方法是什么?
答案 0 :(得分: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
使用的。
答案 1 :(得分:2)
如果您可以像这样更改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}}表