我正在研究动态表单生成器。而且我注意到了奇怪的行为
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"
有人可以解释为什么我可以创建具有质量赋值的新字段,并且不能通过属性添加字段吗?
答案 0 :(得分:3)
根据Mongoid文档,getter / setter方法(例如.surname
)仅在文档中存在该字段时才有效(这就是为什么当您使用该字段创建新的Model
时,它作品)。
你仍然可以这样设置/读取字段:
model[:surname]
model.read_attribute(:surname)
model[:surname] = "My Surname"
model.write_attribute(:surname, "My Surname")