Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 为什么切片需要!工作?_Ruby On Rails_Ruby - Fatal编程技术网

Ruby on rails 为什么切片需要!工作?

Ruby on rails 为什么切片需要!工作?,ruby-on-rails,ruby,Ruby On Rails,Ruby,我正在使用slice方法从另一个对象的属性创建一个新对象 我觉得奇怪的是,在小型测试中,打印出来 user_group.attributes.slice(ArchivedUserGroup.attribute_names) 返回一个空数组。但是,使用!bang工作并返回所有用户组属性 有人能告诉我为什么slice是这样工作的吗 UserGroup.where(user_id: self.id).each do |user_group| ArchivedUserGro

我正在使用slice方法从另一个对象的属性创建一个新对象

我觉得奇怪的是,在小型测试中,打印出来

user_group.attributes.slice(ArchivedUserGroup.attribute_names)
返回一个空数组。但是,使用!bang工作并返回所有用户组属性

有人能告诉我为什么slice是这样工作的吗

      UserGroup.where(user_id: self.id).each do |user_group|
        ArchivedUserGroup.create(
          user_group.attributes.slice!(ArchivedUserGroup.attribute_names)
        )
      end
哈希片!返回包含已删除元素的哈希,而Hashslice返回选定元素:

{ foo: 1, bar: 2 }.slice(:foo, :bar)
=> {:foo=>1, :bar=>2}
{ foo: 1, bar: 2 }.slice!(:foo, :bar)
=> {}
还有,切片!由于bang通过移除非切片元素来改变哈希,因此按照惯例,此方法具有bang

似乎您没有使用ArchivedUserGroup.attribute_名称键的属性,所以切分!只返回属性。

Hashslice!返回包含已删除元素的哈希,而Hashslice返回选定元素:

{ foo: 1, bar: 2 }.slice(:foo, :bar)
=> {:foo=>1, :bar=>2}
{ foo: 1, bar: 2 }.slice!(:foo, :bar)
=> {}
还有,切片!由于bang通过移除非切片元素来改变哈希,因此按照惯例,此方法具有bang


似乎您没有使用ArchivedUserGroup.attribute_名称键的属性,所以切分!只返回属性。

顺便说一句,您可能想使用slice!使用星号将数组扩展为单独的参数:.slice*ArchivedUserGroup.attribute_namesBtw,您可能想使用slice!使用星号将数组扩展为单独的参数:.slice*ArchivedUserGroup.attribute\u名称