Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/55.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,如果我这样做: name_array = Model.column_names name_array.delete_if {|name| ["id","created_at","updated_at"].include?(name)} pp Model.column_names Model.column\u names命令将返回一个数组,该数组不带id,在处创建和在列名处更新。我假设name\u数组将删除名称,而不是Model.column\u names数组 Rails 3.0.13 Rub

如果我这样做:

name_array = Model.column_names
name_array.delete_if {|name| ["id","created_at","updated_at"].include?(name)}
pp Model.column_names
Model.column\u names
命令将返回一个数组,该数组不带
id
处创建和
列名处更新。我假设
name\u数组
将删除名称,而不是Model.column\u names数组

Rails 3.0.13 Ruby 1.9.3

如果
,请参见

删除块计算为true的self的每个元素。数组在每次调用块时立即更改,而不是在迭代结束后更改

因此,当您从
name\u数组
中删除元素时,实际上是从
Model.column\u names
中删除它们,因为它们指向同一个对象

如果不想这样做,请在删除之前:

name_array = Model.column_names.dup
name_array.delete_if {|name| ["id","created_at","updated_at"].include?(name)}

您还可以使用拒绝

a = [1,2,3]
a.reject{|x| x>=2}
=> [1]

Dup可以提供帮助,但有一个重构。dup创建“浅拷贝”这一事实具有以下不明显的后果:

> arr = Model.column_names.dup
=> ["id", "name", "klasse", "cars_count", "klasse_id"] 
> arr.delete('id')
=> "id" 
> arr
=> ["name", "klasse", "cars_count", "klasse_id"] 
> Model.column_names
=> ["id", "name", "klasse", "cars_count", "klasse_id"] 
> arr.each &:upcase!
=> ["NAME", "KLASSE", "CARS_COUNT", "KLASSE_ID"] 
> Model.column_names
=> ["id", "NAME", "KLASSE", "CARS_COUNT", "KLASSE_ID"] 

这里有一个类似的问题和答案:iouri你的评论正是我需要的。如果你想让它成为一个答案,我会接受。如果你接受该链接的答案,我会同意。谢谢。你和iouri的联系解决了我的问题。