代码之家  ›  专栏  ›  技术社区  ›  Dragonfly

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

  •  15
  • Dragonfly  · 技术社区  · 11 年前

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

    谢谢

    3 回复  |  直到 11 年前
        1
  •  41
  •   Abhinaya    11 年前

    这是有效的

    @model.attributes.except("id", "created_at").should == @another_model.attributes.except("id", "created_at")
    
        2
  •  0
  •   jamesfzhang    11 年前

    从那以后你可以做这样的事情 .attributes 返回一个Hash,其中每个键值对都是一个属性及其值。

    @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
    
        3
  •  0
  •   borsaid    2 年前

    model.attribute_names.ject{|att|att-if-%w(id created_at updated_at).include?att}模型属性名称

    这对我有效