Ruby on rails 如何更改保存另一个模型对象的rails模型对象变量名

Ruby on rails 如何更改保存另一个模型对象的rails模型对象变量名,ruby-on-rails,ruby,Ruby On Rails,Ruby,假设我已经定义了这个模型和相关的模式 class Memory < ActiveRecord::Base belongs_to :memory_slot end class MemorySlot < ActiveRecord::Base has_many :memories end 类内存

假设我已经定义了这个模型和相关的模式

class Memory < ActiveRecord::Base
    belongs_to :memory_slot
end

class MemorySlot < ActiveRecord::Base
    has_many :memories
end
类内存

现在,它通常允许我通过
@memory.memory\u slot.name
访问内存的内存插槽。但是我想通过不同的方法访问它,比如
@memory.supporting\u memory\u slot.name
。我能做的最好的方法是什么?

如果您能像这样更改您的
模型关联

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

注意:在这种情况下,如果您可以像这样更改
模型关联,则必须生成新的
迁移
以将
支持的内存插槽id
添加到
内存

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

注意:在这种情况下,您必须生成一个新的
迁移
以将
支持的内存插槽id
添加到
内存
表中

您不需要任何新迁移,您可以使用以前的
内存插槽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
类内存

这样,如果您以前保存了任何记录,它们也将在当前场景中工作。但是,如果生成新迁移,保存的旧记录将无法访问,因为它们是使用
外键
作为
内存插槽id
使用的

您不需要任何新的迁移,您可以使用以前的
内存插槽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
类内存

这样,如果您以前保存了任何记录,它们也将在当前场景中工作。但是,如果生成新迁移,保存的旧记录将无法访问,因为它们是使用
外键
作为
内存插槽id
使用的

谢谢,这就是我要找的:)他能不能把外键指向内存插槽id,比如
外键:内存插槽id
?@Pavan不是这样的。如果您明确地说,Rails将看起来像
memory\u slot\u id
。您指定的模式名称是
class\u name:'MemorySlot'
,而不是
SupportingMemorySlot
@Pavan,因此您不能说必须生成新的。。。。这取决于开发者想要什么。要么他想继续使用最合适的旧
外键
,要么他想继续使用你在答案中指定的新键。@Pavan我收回了它。但是你真的不能把你的个人喜好强加给任何人。我想把所有的选择都给一个新手,然后让他决定他想做什么。谢谢,这就是我想要的:)他能不能把外键指向内存插槽id,比如
外键:内存插槽id
?@Pavan不是这样的。如果您明确地说,Rails将看起来像
memory\u slot\u id
。您指定的模式名称是
class\u name:'MemorySlot'
,而不是
SupportingMemorySlot
@Pavan,因此您不能说必须生成新的。。。。这取决于开发者想要什么。要么他想继续使用最合适的旧
外键
,要么他想继续使用你在答案中指定的新键。@Pavan我收回了它。但是你真的不能把你的个人喜好强加给任何人。我想给一个新手所有的选择,然后,让他决定他想要什么选择。