Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/21.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 一次更改数组的所有项_Ruby_Arrays_Ruby On Rails 3_Performance_Postgresql - Fatal编程技术网

Ruby 一次更改数组的所有项

Ruby 一次更改数组的所有项,ruby,arrays,ruby-on-rails-3,performance,postgresql,Ruby,Arrays,Ruby On Rails 3,Performance,Postgresql,我想知道是否有一种方法可以避免遍历列表中的所有项来访问同一个属性 people = [John, Bob, Dave, Eric] 每个都有一个数字属性(即John.num) 因此,与其使用people.map{| person | person.num=10} 我可能会做人。[…一些魔术..].num=10 在所有的地方循环似乎都是浪费。。如果用户是ActiveRecord模型,则可以使用SQL或类似的方法 如果人员是ActiveRecord模型,则可以使用 我的情况是一个非AR对象,你可以

我想知道是否有一种方法可以避免遍历列表中的所有项来访问同一个属性

people = [John, Bob, Dave, Eric]
每个都有一个数字属性(即
John.num

因此,与其使用
people.map{| person | person.num=10}

我可能会做
人。[…一些魔术..].num=10


在所有的地方循环似乎都是浪费。。如果用户是ActiveRecord模型,则可以使用SQL或类似的方法


如果人员是ActiveRecord模型,则可以使用


我的情况是一个非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

我的情况是一个非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.update_all(“num=10”,“age>20”)
此方法的第二个参数描述了如何选择记录的条件。这样:
Person.update\u all(“num=10”,“age>20”)