2013-10-02 16 views
5

Bir rspec testi yazıyorum. Bir modelin doğru şekilde çoğaltılıp çoğaltılmadığını sınayacak.Modelin tüm özelliklerini nasıl ekleyebilirim?

it "should copy the data" do 
    @model = build(:model) 
    @another_model.copy_data(@model) 
    @model.data.should == @another_model.data 
    end 

veri Böyle yapınca o yineleniyor böylece gömülü belgedir: Yani Spec böyle bir şeydir. Modeldeki tüm öznitelikler, başarılı bir şekilde id ve create_at tarihinin dışında kopyalanır. Böyle bir şey yapmamın bir yolu var mı?

@model.data.attributes.without(:_id, :created_at).should == @another_model.data.attributes.without(:_id, :created_at) 

Ya kimliği ve created_at olmadan tüm diğer alanları seçin nerede tersi?

Teşekkürler!

cevap

19

Bu

@model.attributes.except("id", "created_at").should == @another_model.attributes.except("id", "created_at") 
+0

Mükemmel çalışıyor, teşekkür ederim –

0

.attributes, her anahtar/değer çiftinin, değeriyle birlikte bir öznitelik olduğu bir Karma döndürdüğünden, böyle bir şey yapabilirsiniz.

@model.data.attributes.each do |k,v| 
    next if k == 'id' || k == 'created_at' # Skip if the key is id or created_at 
    v.should == @another_model.data.attributes[k] 
end 
İlgili konular