Ruby on rails 有没有办法确保ActiveRecord层次结构中的每个记录都有一个对象引用?

Ruby on rails 有没有办法确保ActiveRecord层次结构中的每个记录都有一个对象引用?,ruby-on-rails,orm,activerecord,Ruby On Rails,Orm,Activerecord,当我获取一些分层的ActiveRecord结构时,似乎对数据库有相当多的点击。我使用:include选项改进了这一点,以尽可能充实结构。即便如此,ActiveRecord似乎并没有映射关系的对等方,例如,对记录的唯一引用的父子关系。也就是说,我们得到了一个可导航的ActiveRecord结构,但据我所知,它不能保证给定记录的唯一副本 node = Node.find(1, :include => {:document => :node}) node.object_id #A node

当我获取一些分层的ActiveRecord结构时,似乎对数据库有相当多的点击。我使用:include选项改进了这一点,以尽可能充实结构。即便如此,ActiveRecord似乎并没有映射关系的对等方,例如,对记录的唯一引用的父子关系。也就是说,我们得到了一个可导航的ActiveRecord结构,但据我所知,它不能保证给定记录的唯一副本

node = Node.find(1, :include => {:document => :node})
node.object_id #A
node.document.node.object_id #B although I expect/desire A
在ActiveRecord中不可避免?其他人是否因为这样的缺点而转向替代ORM?不要误解我的意思:ActiveRecord是一个很棒的工具。但所有工具都有优缺点


假设我要编写自己的SQL查询,它甚至可以是一个存储过程,返回多个结果集,每个表一个,包含ActiveRecord层次结构的所有相关数据。有没有一种简单的方法可以显式映射关联,而不让ActiveRecord将显式映射误认为是尝试创建新关联?

因此,如果您有一个节点,它有一个父节点id。对于所有节点,父节点不得是任何其他节点的父节点。换句话说,对于所有节点,父节点id应该是唯一的

class Node
  has_one :child, :class_name => "Node", :foreign_key => :parent_id

  belongs_to :parent, :class_name => "Node"
  validates_uniqueness_of :parent_id
end

因此,如果你有一个节点,它有一个父节点id。对于所有节点,父节点不能是任何其他节点的父节点。换句话说,对于所有节点,父节点id应该是唯一的

class Node
  has_one :child, :class_name => "Node", :foreign_key => :parent_id

  belongs_to :parent, :class_name => "Node"
  validates_uniqueness_of :parent_id
end

不幸的是,我想你被卡住了。这不是ActiveRecord支持的东西,据我所知,没有支持它的计划。正如您在Sarah Mei提到的问题中所看到的,可能存在一些问题


如果您能提供更多关于您的用例的信息,它可能会帮助我们找出是否有其他方法来处理您的问题。

不幸的是,我认为您被卡住了。这不是ActiveRecord支持的东西,据我所知,没有支持它的计划。正如您在Sarah Mei提到的问题中所看到的,可能存在一些问题


如果您能提供更多关于您的用例的信息,它可能会帮助我们找出是否有其他方法来处理您的问题。

我认为ActiveRecord的设计并不支持这个想法。这仅仅意味着你必须使用ActiveRecord,了解它的优点和缺点。我找到了解决这个问题的方法

我看过DataMapper,发现它解决了这个问题:

数据库中的一行 应等于一个对象引用。 这主意很简单。相当深刻 影响如果您运行以下代码 在ActiveRecord中,您将看到所有false 后果在DataMapper和中执行相同的操作 一直以来都是真的


我只是不认为ActiveRecord是为了支持这个想法而设计的。这仅仅意味着你必须使用ActiveRecord,了解它的优点和缺点。我找到了解决这个问题的方法

我看过DataMapper,发现它解决了这个问题:

数据库中的一行 应等于一个对象引用。 这主意很简单。相当深刻 影响如果您运行以下代码 在ActiveRecord中,您将看到所有false 后果在DataMapper和中执行相同的操作 一直以来都是真的


对于像我这样的人来说,在被问到这个问题的几年后,他们偶然发现了它!,退房


它建议使用:逆_建立双向关联。我希望我在过去没有这么多次浏览过这部分文档

对于像我这样被问到这件事的人来说!,退房


它建议使用:逆_建立双向关联。我希望我在过去没有这么多次浏览过这部分文档

你可能会对这个问题感兴趣:是的,谢谢莎拉。我问了同样的问题。你可能会对这个问题感兴趣:是的,谢谢莎拉。我也在问同样的问题,这就是我所怀疑的。我想它更多地与ActiveRecord设计模式本身有关。我可以解决它;我只需要注意这个潜在的麻烦。这就是我所怀疑的。我想它更多地与ActiveRecord设计模式本身有关。我可以解决它;我只需要注意这个潜在的麻烦。