给定两个具有一对多关联的 ActiveRecord 模型,User.rb:
class User < ActiveRecord::Base
has_many :books, foreign_key: "user_id", dependent: :destroy
end
书.rb:
class Book < ActiveRecord::Base
belongs_to :user, foreign_key: "user_id", dependent: :destroy
end
然后在 app.rb 中,问题会出现
class ProblemApp
dbconfig = YAML.load(File.open("config/database.yml").read)
ActiveRecord::Base.establish_connection(dbconfig['development'])
user = User.first
(1..5).each do |price|
user.books.each do |book| ####### bug line !!!!!!!!!!!!!!!
end ####### bug line !!!!!!!!!!!!!!!
return nil unless (book = user.books.find_by_id 1)
puts book.name.to_s + " + " + price.to_s
book.price = price # change attr
puts book.save # save changing
book = user.books.first
puts book.name.to_s + " - " + book.price.to_s
puts "================="
end
end
控制台输出:
Running...
Ruby + 1
true
Ruby - 1
=================
Ruby + 2
true
Ruby - 1
=================
Ruby + 3
true
Ruby - 1
=================
Ruby + 4
true
Ruby - 1
=================
Ruby + 5
true
Ruby - 1
=================
在每次更改操作之前插入 books.each 块时,模型的价格不会更新。但是,执行保存行时,数据库中的价格可能会更新。删除块的两行时,问题消失了。
更多信息在我的GitHub有人知道为什么以及如何解决这个问题吗?
也许你应该在阅读书籍之前更新用户的ActiveRecord::Relations。
尝试在book.save
后添加user.reload
。
单击此处获取更多信息。