ruby on rails - Mongoid fields issue



我正在研究动态表单生成器。我注意到一些奇怪的行为

class Model
  include Mongoid::Document
  field :name, :type => String
end
model = Model.new
model.name = "My Name"
model.surname = "My Surname"
#=> NoMethodError: undefined method `surname='

,

model = Model.new( :name => "My Name", :surname => "My Surname" )
#=> ok
model.surname
#=> "My Surname"
model.surname = "New Surname"
#=> "New Surname"

谁能解释一下为什么我可以用批量分配创建新字段,而不能通过属性添加字段?

根据Mongoid文档,getter/setter方法(例如.surname)仅在文档中存在字段时才会起作用(这就是为什么当您使用该字段创建新的Model时,它会起作用)。

您仍然可以这样设置/读取字段:

model[:surname]
model.read_attribute(:surname)
model[:surname] = "My Surname"
model.write_attribute(:surname, "My Surname")

见http://mongoid.org/docs/documents/dynamic.html

最新更新