rails mongoid:如何在 assign_attributes 上关闭 nested_attributes 的持久性

rails mongoid: how to turn of persistence of nested_attributes on assign_attributes

这里是一些简化的代码:

class Page
  include Mongoid::Document
  has_many :content, class_name: 'Content', dependent: destroy, autosave: false
  accepts_nested_attributes_for :content
  field :title, type: String
end

class Content
  include Mongoid::Document
  belongs_to :page
  field :text, type: String
end

class PagesController < ApplicationController
  def update
    @page = Page.unscoped.find(params['id'])
    @page.assign_attributes params.require(:page)

    puts @page.reflect_on_association(:content)
    # {:relation=>Mongoid::Relations::Referenced::Many, :extend=>nil, :inverse_class_name=>"Page", :name=>:content, :class_name=>"Content", :dependent=>:destroy, :autosave=>false, :validate=>true}
  end
end

我有一个控制器规范,它创建一个页面和来自工厂的相关内容,并尝试修补该页面。无论我在页面参数中发送什么(只是标题或带有 content_attributes)它都不会像预期的那样保存任何东西。

如果我在开发中对此进行测试,当参数仅包含 Page.title 时,不会更新任何内容;如果参数中有内容属性数组,则内容会更新。

我唯一想要的是将新参数分配给页面并关联 objects,然后再手动保留或拒绝。我做错了什么?

===

更新:

在我的真实项目内容模型中,字段 :text 是本地化的;在我将它更改为一个简单的字符串字段后,规范也失败了(即使自动保存为假并且从未调用过保存,该字段仍然存在)。

尝试将 validates_associated :page 添加到内容模型