我有三种模式:
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">
为什么?
答案 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)
检查您的路线并在链接中指明。