当前位置:  开发笔记 > 后端 > 正文

Rails协会:自动保存似乎没有按预期工作

如何解决《Rails协会:自动保存似乎没有按预期工作》经验,为你挑选了0个好方法。

我在这里做了一个真实的基本github项目来演示这个问题。基本上,当我创建新评论时,它会按预期保存;更新现有评论时,不会保存它。但是,这并不是文档:autosave => true所说的……他们说的恰恰相反。这是代码:

class Post < ActiveRecord::Base
  has_many :comments, 
           :autosave => true, 
           :inverse_of => :post,
           :dependent => :destroy

  def comment=(val)
    obj=comments.find_or_initialize_by(:posted_at=>Date.today)
    obj.text=val
  end
end

class Comment < ActiveRecord::Base
  belongs_to :post, :inverse_of=>:comments
end

现在在控制台中,我测试:

p=Post.create(:name=>'How to groom your unicorn')
p.comment="That's cool!"
p.save!
p.comments # returns value as expected. Now we try the update case ... 

p.comment="But how to you polish the rainbow?"
p.save!
p.comments # oops ... it wasn't updated

为什么不?我想念什么?

请注意,如果您不使用“ find_or_initialize”,则它会因为ActiveRecord尊重关联缓存而起作用-否则,它会过于频繁地重新加载注释,从而导致更改。即,此实现有效

def comment=(val)
  obj=comments.detect {|obj| obj.posted_at==Date.today}
  obj = comments.build(:posted_at=>Date.today) if(obj.nil?)
  obj.text=val
end

但是,当然,如果我可以对数据库进行操作,则我不想遍历内存中的集合。另外,似乎与新对象兼容但不适用于现有对象。

推荐阅读
mobiledu2402851377
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有