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的联系解决了我的问题。