2011-07-13 47 views
1

我正在使用動態表單生成器。而且我發現奇怪的行爲Mongoid字段問題

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" 

有人可以解釋爲什麼我可以創建質量分配新的領域和無法通過屬性字段添加?

回答

3

根據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

+0

謝謝@Dylan!那就是 – fl00r

+0

這是相同的功能:'model [:surname] =「My Surname」''和'model.write_attribute(:surname,「My Surname」)''。有什麼不同?我剛剛測試過 - 看起來非常相似,但該文檔中沒有評論文章 – fl00r

+1

源代碼具有'alias:[]:read_attribute',因此它們完全相同(與'[] ='和'write_attribute相同')。只需使用你喜歡的那個。 –