如何获得模型的所有属性减去几个

时间:2013-10-02 18:33:36

标签: ruby-on-rails rspec mongoid

所以我正在写一个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的所有其他字段?

谢谢!

2 个答案:

答案 0 :(得分:27)

这有效

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

答案 1 :(得分: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