Mongoid as_json вызывает удаление документа

При выполнении следующего запроса MongoDB таинственным образом выдает команду удаления и удаляет объект, для которого выполнялся as_json. to_json имеет тот же эффект.

Stream.first.as_json

Журнал MongoDB

database=integration collection=streams selector={"$query"=>{}, "$orderby"=>{:_id=>1}} flags=[] limit=-1 skip=0 batch_size=nil fields=nil runtime: 62.9890ms

MOPED: 54.237.57.2:10996 DELETE       database=integration collection=streams selector={"_id"=>BSON::ObjectId('55087e6e436c611d42410000')} flags=[:remove_first]

Окружающая среда

RAILS 4.2, Mongoid 4.0.2 и MongoDB 3.0.0

Потоковая модель

class Stream

include Mongoid::Document

field :stream_identifier, type: String
field :cover, type: String
field :caption, type: String
field :location, type: String
field :place, type: String
field :watchers_count, type: Integer
field :comments_count, type: Integer
field :likes_count, type: Integer
field :restreams_count, type: Integer
field :activities, type: Array
field :influencers, type: Array
field :encores, type: String
field :cover_images, type: Array
field :status, type: String
field :end_time, type: Integer
field :tweet_id, type: String
field :fans, type: Array
field :likes, type: String
field :delete, type: String
field :playlist, type: String
field :restreams, type: String
field :comments, type: String
field :watchers, type: String

alias_attribute :likesCount, :likes_count
alias_attribute :coverImages, :cover_images
alias_attribute :commentsCount, :comments_count
alias_attribute :watchersCount, :watchers_count
alias_attribute :restreamsCount, :restreams_count
alias_attribute :endTime, :end_time
alias_attribute :tweetId, :tweet_id

embeds_one :broadcaster
has_one :feed

def update_stream
    UpdateStreamStatus.perform_async(self.stream_identifier)
end
end

Модель вещания

class Broadcaster
include Mongoid::Document
field :identifier, type: String
field :name, type: String
field :display_name, type: String
field :profile, type: String
field :image, type: String

alias_attribute :displayName, :display_name

embedded_in :stream
end

person Clayton Selby    schedule 17.03.2015    source источник


Ответы (1)


У вас есть поле с именем delete в вашем Stream:

field :delete, type: String

Для каждого поля (f) в вашей модели (m) и as_json, и to_json будут вызывать m.f. Это означает, что каждый вызов as_json или to_json в конечном итоге вызовет m.delete. Предположительно, это вызывает метод Mongoid delete и удаляет документ из MongoDB (без вызова обратных вызовов).

Я бы рекомендовал переименовать ваше поле delete во что-то, что не противоречит методам Mongoid.

person mu is too short    schedule 17.03.2015
comment
Браво! Браво! Вау... Не могу поверить, что есть склонение, основанное на имени поля... - person Clayton Selby; 18.03.2015