在Rails中使用object_id列的含义

时间:2016-06-03 20:48:43

标签: ruby-on-rails ruby

Object本身包含object_id并覆盖它(http://ruby-doc.org/core-2.3.1/Object.html#method-i-object_id)的模型上(对于多态关联)拥有object_id / object_type有什么含义?

class Event
  belongs_to :object, polymorphic: true # object_id/object_type
end

4 个答案:

答案 0 :(得分:5)

当我通过我的一个rails项目(包括所有gem)的整个代码库搜索object_id时,我可以看到超过200次点击。仅在Rails中,这是about 50 hits

我希望记录比较存在问题,将它们用作哈希键,将它们放到set s,也可以duplicatingdup一起使用。在Rails中,record.object_id在缓存,has_many_through关联,AREL,非常打印记录,最小的期望,也在pry调试器中引用,

但是从快速查看代码来看,很难猜测它是否会导致问题而且我通常会对这些潜在的问题保持警惕 - 你永远不会确定你的下一次使用object不会以一种既难以调试又可能无法修复的方式破坏事物。

正如我上面所说,如果你尝试过,我会非常好奇,但我自己宁愿将其命名为belongs_to :thing, polymorphic: true或更好,还有更具体的东西。

答案 1 :(得分:3)

如果你试图在一个类上定义object_id,你会发现你从Ruby解释器warning: redefining 'object_id' may cause serious problems得到以下生气警告(从IRB尝试)。这听起来很可怕 - 事件可能与特定版本的Ruby绑定(并根据使用的版本而有所不同)。我建议修理这个。

答案 2 :(得分:2)

我相信你可以将object_to对象,同时将foreign_key定义为其他东西,例如foreign_key :: object_identifier。这样你就不用担心object_id。

答案 3 :(得分:0)

我认为最好遵循此文档Active Record Associations,我认为定义另一个object_id将使您在代码中手动维持关系,并且您将失去Active Record功能。