我在尝试建立从其他人那里继承的模型关联时遇到了 AR 问题。问题是在调用执行 save 方法之前将关联的模型保存到数据库中。我在这个页面找到了更多信息 http://techspry.com/ruby_and_rails/active-records-or-push-or-concat-method/这真的很奇怪,为什么 AR 会自动保存附加到关联的模型(使用 @user.reviews.build(good_params)但这在关联具有层次结构的上下文中会出现问题,例如:如果 Hunter has_many :animals,而 Dog 和 Cat 继承自 Animal,我们就不能这样做@[email protected]相反,我们被困在@hunter.animals << [email protected] << Dog.new如果 Cat/Dog 类没有验证,该对象将自动保存到数据库中。我怎样才能防止这种行为? (adsbygoogle = window.adsbygoogle || []).push({}); 最佳答案 我发现 Rails 3 不完全支持与 STI 的关联,通常需要 hacks。阅读这篇文章的更多内容 http://simple10.com/rails-3-sti/ 。正如其中一条评论中提到的,这个问题在 rails 4 https://github.com/rails/rails/commit/89b5b31cc4f8407f648a2447665ef23f9024e8a5 中提到Rails sux 处理继承如此糟糕 = (( 希望 Rails 4 解决了这个问题。同时我正在使用这个丑陋的解决方法:animal = @hunter.animals.build type: 'Dog'然后替换构建的对象,这一步可能是反射锻炼所必需的(检查露西的回答和评论)hunter.animals[@hunter.animals.index(animal)] = animal.becomes(Dog)这将在这种情况下正确运行,因为hunter.animals[@hunter.animals.index(animal)].is_a? Dog将返回 true 并且不会对分配进行任何数据库调用 (adsbygoogle = window.adsbygoogle || []).push({});
10-08 11:11