对于任何模型实例,都有一个#object_id和#id - 我知道它们不一样。
但是,我不太清楚是什么让它们与众不同以及它们如何在上下文中使用。
请帮忙澄清!!
谢谢!
答案 0 :(得分:3)
在Rails中,ActiveRecord模型实例具有id
属性,该属性映射到存储在数据库的id
列中的值。如果记录尚未保存,则可能为nil
。
在Ruby中,object_id
是一个表示相关对象标识的值。 总是填充了某些内容,因为Ruby中的所有内容都是对象。
这两者无关。模型可能有多个独立实例,每个实例都有自己的object_id
值,但相同id
。
如果两个变量引用具有相同object_id
的内容,则它们引用完全相同的对象。
很少见到object_id
在代码中使用,它是一个几乎不需要的Ruby内部。主要是确定你是在讨论相同的对象,还是只是等效的。
另一方面,您将看到id
和经常使用的类似值,因为这是将关系数据库保存在一起的粘合剂。
答案 1 :(得分:2)
简而言之,:id
是表格的默认primary_key
。除非您设置object_id
,否则foriegn_key
可能是custom foreign_key
。
例如,请使用这两个表users
和posts
。关系将是
user => has_many posts
和
post => belongs to user
所以在posts
表中,我们应该创建一个foreign_key
(在本例中为user_id
)以使关系有效。
希望它有所帮助!
答案 2 :(得分:1)
id
特定于ActiveModel记录,它与数据库中的id列相关。 object_id
在Object上定义,对于在内存中创建的每个对象都是唯一的。
答案 3 :(得分:1)
Ruby中的所有东西(我的意思是一切)都是一个对象。这些对象中的每一个都有一个object_id,它基本上是用于在内存中跟踪它们的值。
在Rails中,模型实例会自动设置方法,以便从数据库中的相应列返回它们的值。 .id
就是其中之一。
就在上下文中使用而言,通常你不会在代码中使用object_id:它是一个引擎盖下的东西。
编辑 - 另外,在旧版本的ruby / rails中看到了一个常见问题(其中object_id
方法实际上被称为id
,并被铁路的id
方法覆盖)是因为nil
的object_id是4
。因此,您可以在一个您希望成为模型实例的变量上调用id,但实际上是nil,因此当您希望从数据库中获取记录的id时,会返回“4”。