Передать значение в метод Mongoid model.new без создания поля

Я хочу передать значение в модель Mongoid, которая не связана с каким-либо полем и не должна храниться в базе данных, а вместо этого должна использоваться для некоторых дополнительных действий (например, выполнение пользовательской инициализации):

class Author
    include Mongoid::Document
    embeds_many :books

    field :name, type: String

    # Create a set number of empty books associated with this author.
    def create_this_many_books(quantity)
        quantity.each do |i|
            books << Book.new
        end
    end
end

class Book
    include Mongoid::Document
    embedded_in :author

    field :title, type: String
end

Теперь, как я могу создать заданное количество встроенных пустых book объекты при создании нового автора:

author = Author.new(name: 'Jack London', number_of_books: 41)

Вот, :number_of_books это не поле в Author модель, но значение передается create_this_many_books, Каков наилучший способ сделать это?

1 ответ

Решение

Изменить Author модель быть

class Author
  include Mongoid::Document
  embeds_many :books

  field :name, type: String
  attr_accessor :number_of_books 
  # this is plain old ruby class member not saved to the db but can be set and get

  after_create :create_this_many_books

  def create_this_many_books
    self.number_of_books.each do |i|
      books << Book.new
    end
  end
end
Другие вопросы по тегам