2011-07-13 1 views
1

私は動的フォームジェネレータに取り組んでいます。そして私は、私は大量の割り当てを使用して新しいフィールドを作成することができますし、属性によってフィールドを追加することはできませんなぜ誰かが説明できますか?モンゴイイフィールドの問題

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

ゲッター/セッターメソッド(例:.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 ')。あなたが好むものだけを使用してください。 –

関連する問題