gpt4 book ai didi

ruby-on-rails - Mongo/Mongoid 将创建但不更新模型

转载 作者:可可西里 更新时间:2023-11-01 09:37:37 26 4
gpt4 key购买 nike

我有一个应用程序,它会在帖子存在时更新它,否则它会创建一个新帖子。这篇文章包含嵌入式文档:

class Post
embeds_one :tag, :as => :taggable, :class_name => 'TagSnippet'
end

class TagSnippet
include Mongoid::Document
field :name
embedded_in :taggable, polymorphic: true
end

帖子在 Controller 中更新,代码如下:

@post = Post.where(--some criteria which work--).first
if @post
@post.attributes = params
else
@post = Post.new(params)
end

@post.save!

此代码运行并更新非嵌入式文档,但不更新嵌入式文档。奇怪的是,当我在 Rubymine 中调试时,@post 的所有属性都会适当更改(包括嵌入式属性),但无论数据库是否更新。

这向我表明这是一些 mongo 或 mongoid 问题,但回滚 mongo 和 mongoid gems 没有产生任何变化。

最佳答案

我猜你的嵌入式文档是这样定义的:

field :subdoc, type: Hash

我已经碰到过几次了。简短说明:Mongoid 不跟踪子哈希内的更改。

doc.subdoc.field_a = 1 # won't be tracked

sd = doc.subdoc.dup
sd.field_a = 1
doc.subdoc = sd # should be tracked

因此,如果 Mongoid 未检测到赋值,它不会将属性标记为脏,因此不会将其包含在更新操作中。

通过在保存前打印 doc.subdoc_changed? 来检查这个理论。

关于ruby-on-rails - Mongo/Mongoid 将创建但不更新模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9947943/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com