Ruby on rails 不可靠行为有很多:期权的逆

Ruby on rails 不可靠行为有很多:期权的逆,ruby-on-rails,activerecord,Ruby On Rails,Activerecord,例如: 有什么问题:的逆\u?我不确定这是否是一个bug,但当你处理关联(如关系)时,的逆\u不起作用: d.traps.where('1=1')[0].dungeon.object_id != d.object_id d.traps.first.dungeon.object_id != d.object_id 虽然当您像使用数组一样使用它时,的逆\u可以正常工作: d.traps.map { |t| t.dungeon.object_id } == [d.object_id] d.traps

例如:


有什么问题:
的逆\u?

我不确定这是否是一个bug,但当你处理关联(如关系)时,
的逆\u不起作用:

d.traps.where('1=1')[0].dungeon.object_id != d.object_id
d.traps.first.dungeon.object_id != d.object_id
虽然当您像使用数组一样使用它时,
的逆\u可以正常工作:

d.traps.map { |t| t.dungeon.object_id } == [d.object_id]
d.traps[0].dungeon.object_id == d.object_id
创建对象时,它会正常工作:

d.traps.build.dungeon.object_id == object_id
它不适用于具有多个(并且在文档中的某个地方指定):

因此,为了避免因

  • 使用
    [0]
    而不是先使用
  • 不要实现依赖它的逻辑(其他人可能会用
    some\u scope
    替换您的
    select(&:some\u predicate?
    ),您的代码将不再工作)
  • 对于
    所属的
    在关联的另一端有多个
    ,请不要使用
    的反向
  • d.traps.map { |t| t.dungeon.object_id } == [d.object_id]
    d.traps[0].dungeon.object_id == d.object_id
    
    d.traps.build.dungeon.object_id == object_id
    
    t.dungeon.tasks[0].object_id != t.object_id