Model.find返回具有错误ID的对象

时间:2015-02-16 15:06:42

标签: ruby-on-rails ruby-on-rails-4

我有三种模式:

class Miniature < ActiveRecord::Base
  has_many :minilines, dependent: :destroy
  has_many :lines, :through => :minilines
end

class Line < ActiveRecord::Base  
  has_many :minilines, dependent: :destroy
  has_many :miniatures, :through => :minilines
end

class Miniline < ActiveRecord::Base
    default_scope { select('*').joins(:line).order('lines.name ASC') }
    belongs_to :miniature
    belongs_to :line
end

如果我尝试在Rails控制台中加载Miniline,它会返回错误的对象:

Miniline.find(206)
Miniline Load (0.3ms) SELECT * FROM "minilines" INNER JOIN "lines" ON "lines"."id" = "minilines"."line_id" WHERE "minilines"."id" = ? ORDER BY lines.name ASC LIMIT 1 [["id", 206]] 
=> #<Miniline id: 16, miniature_id: 183, line_id: 16, created_at: "2014-02-05 16:49:24", updated_at: "2014-04-24 10:37:33">

为什么?

2 个答案:

答案 0 :(得分:1)

罪魁祸首似乎是

中的select('*')
default_scope { select('*').joins(:line).order('lines.name ASC') }

应该阻止范围中的join返回ActiveRecord::ReadOnlyRecord。执行此操作的规范方法是使用readonly(false)

default_scope { joins(:line).order('lines.name ASC').readonly(false) }

虽然this was buggy发布了几个版本,但现在似乎工作正常。

答案 1 :(得分:0)

您的删除路径可能有问题:miniline_path(:miniature_id => @miniature.id, :line_id => line.id)检查您的路线并在链接中指明。

相关问题