Как установить nil / изменить внедренные данные в mongoid в консоли Rails? - PullRequest
0 голосов
/ 01 апреля 2012

В настоящее время у меня есть таблица User со столбцом toys_owned, который является встроенным документом. Как мне установить nil / изменить внедренный документ в моей консоли rails? В настоящее время он дает мне NoMethodError, когда я пытаюсь установить его на nil.

Примечание: я стараюсь по возможности избегать использования оболочки монго

приложение / модели / toysOwned.rb

class ToysOwned
  include Mongoid::Document

  embedded_in :user, :inverse_of => :toys_owned
  referenced_in :toy
end

Консоль Rails:

User.where(email: "john1433@aol.com").first.toys_owned
 => [#<ToysOwned _id: 7e5s72d19gb23f0001203025, toy_id: BSON::ObjectId('6g46af0g2ffchc000100003d')>]
ruby-1.9.2-p290 :049 > u = User.where(email: "john1433@aol.com").first.toys_owned.first
 => #<ToysOwned _id: 7e5s72d19gb23f0001203025, toy_id: BSON::ObjectId('6g46af0g2ffchc000100003d')>
ruby-1.9.2-p290 :051 > u = nil
 => nil 
ruby-1.9.2-p290 :052 > u.save
NoMethodError: undefined method `save' for nil:NilClass

app / models / user.rb (некоторые из них)

class User
  include Mongoid::Document
  include Mongoid::Timestamps

  include ToyOwnable
  ...520 lines of code...
end

1 Ответ

0 голосов
/ 01 апреля 2012

Попробуйте, это должно работать:

user = User.where(email: "john1433@aol.com").first
user.toys_owned.shift
user.save

Если вы прочитаете свой код в течение пары минут, вы поймете, что делаете сумасшедшие вещи:)

Сначала вы устанавливаете u на первое из toys_owned. Затем вы устанавливаете эту ссылку u на nil. Это не влияет на оригинальную коллекцию toys_owned. Затем вы пытаетесь вызвать метод на u (который на данный момент равен nil и не может выполнить ваш запрос).

...