ruby-on-rails - 保存后,父级的 Rails has_many 关系未更新

标签 ruby-on-rails activerecord

Rails 5.2 的简化代码。

一个非常简单的Base类,它添加了其Items的一些值。

class Base < ApplicationRecord
  has_many :items

  def values
    children.map(&:value).sum
  end
end

修改自身的 Item 类:

class Item < ApplicationRecord
  belongs_to: :base

  def increment
    puts parent.values # == 0
    self.value = 10
    save!
    puts parent.values # == 0 #???
  end
end

当调用some_item.increment时,我希望第二个parent.values返回10,但事实并非如此。 在下一次调用时,它确实返回 10,不知何故,它被缓存以供第一次调用。

是否存在某种隐藏的缓存机制,或者 save! 是否延迟了更改?

最佳答案

您必须使用reload!重新加载父对象

class Item < ApplicationRecord
  belongs_to: :base

  def increment
    puts parent.values # == 0
    self.value = 10
    save!
    parent.reload!
    puts parent.values
  end
end

关于ruby-on-rails - 保存后,父级的 Rails has_many 关系未更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58411434/

相关文章:

ruby-on-rails - 语法错误-意外的tIDENTIFIER,期望带有Submit_tag的 ')'

ruby-on-rails - 如果值不为空,Rails sort_by 方法

sql - 在 activerecord 中自动大写列名和表名

php - 如何将数据从主键列插入到外键

ruby - 防止 Ruby on Rails 规范中的数据库回滚?

ruby-on-rails - 验证或不验证 bool 字段

ruby-on-rails - 在完成另一个任务后运行一个rake任务

ruby-on-rails - 如何删除事件记录查询中的引号

ruby-on-rails - rake assets :precompile and RAILS_ENV=production rake assets:precompile? 之间有什么区别

ruby-on-rails - Rails 2.3.11 为表单创建模型并使用 ActiveRecord 验证