Ruby on rails 为什么切片需要!工作?
我正在使用slice方法从另一个对象的属性创建一个新对象 我觉得奇怪的是,在小型测试中,打印出来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
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名称