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我收回了它。但是你真的不能把你的个人喜好强加给任何人。我想给一个新手所有的选择,然后,让他决定他想要什么选择。