Передать значение в метод 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