/ / Mongo / Mongoid створить, але не оновить модель - ruby-on-rails, mongodb, mongoid

Монго / Монгоід створить, але не оновить модель - рубіни на рельсах, монгоб, монгоди

У мене є додаток, який оновлює публікацію, якщо вона існує, інакше вона створює нову. Ця публікація містить вбудовані документи:

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

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

Повідомлення оновлюється в контролері з таким кодом:

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

@post.save!

Цей код запускає та оновлює невкладені документи, але не оновлює вбудовані документи. Як не дивно, коли я налагоджую в Rubymine всі атрибути @post змінити належним чином (включаючи вбудовані), але незалежно від бази даних не оновлюється.

Це вказує на мене, що це певна проблема монго чи монгоїда, але відкат монго та монгоїдних дорогоцінних каменів не змінився.

Відповіді:

3 для відповіді № 1

Я думаю, що ваш вбудований документ визначений так:

field :subdoc, type: Hash

Я наткнувся на це вже пару разів. Коротке пояснення: Монгоїд не відстежує зміни всередині підрозділів.

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? перед збереженням.