2012-11-29 2 views
0

목록의 모든 항목을 반복하여 동일한 속성에 액세스하는 것을 피하는 방법이 있는지 궁금합니다. 각각 배열의 모든 항목을 즉시 변경하십시오.

people = [John, Bob, Dave, Eric] 

은 .. 아마와 나는 그냥 모든 루프를 순환시키는 낭비를 보인다 people.[...some magic..].num = 10

을 할 수있다 (즉 John.num)

그래서 대신 people.map{|person| person.num =10}

숫자 속성이 SQL 또는 유사

답변

3

사람이 ActiveRecord 모델 인 경우을 사용할 수 있습니다.방법

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

부분 목록을 사용하여 수행 할 수 있습니까? –

+0

이 메서드에 대한 두 번째 인수는 레코드를 선택하는 방법에 대한 조건을 설명합니다. 이 방법은 :'Person.update_all ("num = 10", "age> 20")' – alony

0

I의 경우, 당신은 배열 원숭이 패치 할 수 없음 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 
관련 문제