2012-11-29 40 views
0

我在想,是否有避免循環訪問列表中的所有項目以訪問相同屬性的方法。立即更改數組的所有項目

people = [John, Bob, Dave, Eric] 

與每個都有一些屬性(即John.num

所以不是people.map{|person| person.num =10}

我可能會做people.[...some magic..].num = 10

它只是似乎是一種浪費,通過所有循環..也許用SQL或類似的文件

回答

3

如果用戶是ActiveRecord模型,則可以使用update_all方法

Person.update_all("num=10") 
+0

可以使用部分列表Person模型來完成嗎? –

+0

該方法的第二個參數描述瞭如何選擇記錄的條件。這樣:'Person.update_all(「num = 10」,「age> 20」)' – alony

0

我的情況下是沒有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