Mongoid вече поддържа динамични полета. Тяхната документация може да бъде намерена тук:http://mongoid.org/en/mongoid/docs/documents.html#dynamic_fields
По принцип той предупреждава, че трябва да внимавате малко как задавате динамични полета, тъй като ще предизвика грешка без метод, ако се опитате да използвате методите за получаване и настройка за поле, което не съществува в документа.
[],[]=са преки пътища за read_attribute(),write_attribute() и трябва да се използват, ако не зададете dynamic_attributes = true
във вашия ./config/mongoid.yml file
, в противен случай ще получите грешка без метод.
Задаване на allow_dynamic_fields: true
може да бъде рисковано, тъй като може да замърсите вашите данни/схема с непреднамерени полета, причинени от грешки във вашия код. Вероятно е по-безопасно да зададете това на false
и изрично използвайте [],[]=
# Raise a NoMethodError if value isn't set.
person.gender
person.gender = "Male"
# Retrieve a dynamic field safely.
person[:gender]
person.read_attribute(:gender)
# Write a dynamic field safely.
person[:gender] = "Male"
person.write_attribute(:gender, "Male")