如何更改包含另一个模型对象的rails模型对象变量名称

时间:2015-06-14 12:51:28

标签: ruby-on-rails ruby

说我已定义此模型和关联模式。

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之类的不同方法访问它。我能做到的最好方法是什么?

2 个答案:

答案 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}}表