ruby-on-rails 我如何得到模型的所有属性减去一些

6ie5vjzr  于 2023-10-21  发布在  Ruby
关注(0)|答案(4)|浏览(130)

所以我在写一个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?
谢谢你,谢谢

7kqas0il

7kqas0il1#

这工程

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

ddrv8njm2#

您可以这样做,因为.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
n8ghc7c1

n8ghc7c13#

model.attribute_names.reject {|att| att if %w(id created_at updated_at).include?att }
这对我很有效

2sbarzqh

2sbarzqh4#

迟到了,但没有人建议:

@model.attributes - %w(id, created_at)

看上去很干净。

相关问题