我在想,是否有避免循環訪問列表中的所有項目以訪問相同屬性的方法。立即更改數組的所有項目
people = [John, Bob, Dave, Eric]
與每個都有一些屬性(即John.num
)
所以不是people.map{|person| person.num =10}
我可能會做people.[...some magic..].num = 10
它只是似乎是一種浪費,通過所有循環..也許用SQL或類似的文件
我在想,是否有避免循環訪問列表中的所有項目以訪問相同屬性的方法。立即更改數組的所有項目
people = [John, Bob, Dave, Eric]
與每個都有一些屬性(即John.num
)
所以不是people.map{|person| person.num =10}
我可能會做people.[...some magic..].num = 10
它只是似乎是一種浪費,通過所有循環..也許用SQL或類似的文件
如果用戶是ActiveRecord模型,則可以使用update_all方法
Person.update_all("num=10")
我的情況下是沒有AR對象,就可以猴子修補陣列,但我認爲這是可怕的方式......我建議你不這樣做!
class Person
def num=(value)
@num = value
end
def num
@num
end
end
class Array
def num value = 10
self.each do |element|
element.__send__(:num=, 10) if element && element.respond_to?(:num)
end
end
end
begin
john = Person.new
bob = Person.new
[john, bob].num
puts "john.num => #{john.num}"
end
可以使用部分列表Person模型來完成嗎? –
該方法的第二個參數描述瞭如何選擇記錄的條件。這樣:'Person.update_all(「num = 10」,「age> 20」)' – alony