2013-10-02 2 views
5

Так что я пишу тест rspec. Он будет проверять, правильно ли продублирована модель. Таким образом, спецификация что-то вроде этого:Как получить все атрибуты модели минус несколько

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

Данные представляет собой встроенный документ, так что дублируется, когда я делаю это. Все атрибуты модели скопированы успешно минус id и дата created_at. Есть ли способ сделать что-то подобное?

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

Или наоборот, где я выбираю все остальные поля без id и created_at?

Спасибо!

ответ

19

Это работает

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

Отлично, спасибо –

0

Вы можете сделать что-то подобное, так как .attributes возвращает хеш, где каждая пара значений ключа является атрибутом вместе с его значением.

@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 
Смежные вопросы