2013-10-02 24 views
5

Vì vậy, tôi đang viết một thử nghiệm rspec. Nó sẽ kiểm tra nếu một mô hình được nhân đôi một cách chính xác. Vì vậy, spec là một cái gì đó như thế này:Làm thế nào để tôi nhận được tất cả các thuộc tính của một Mô hình trừ đi một số

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

Các dữ liệu là một tài liệu nhúng vì vậy nó được nhân đôi khi tôi làm điều này. Tất cả các thuộc tính trên mô hình được sao chép thành công trừ id và ngày created_at. Có cách nào tôi có thể làm một cái gì đó như thế này?

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

Hoặc cách khác để chọn tất cả các trường khác không có id và created_at?

Cảm ơn!

Trả lời

19

này hoạt động

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

Tuyệt vời, cảm ơn bạn –

0

Bạn có thể làm điều gì đó như thế này vì .attributes trả về một Hash trong đó mỗi cặp khóa-giá trị là một thuộc tính cùng với giá trị của nó.

@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 
Các vấn đề liên quan