Изменения ассоциации Rails has_many в родительскую модель не отражают? - PullRequest
0 голосов
/ 25 января 2012

Например, у меня есть это:

class Family < ActiveRecord::Base
  :has_many :members

  def aging(date)
    members.find_all_by_birthday(date).each do |m|
      m.age = m.age+1
      # i dont want to put a m.save here
    end
  end

  # some validations
end

@family = Family.first
@family.aging("2012-01-04")
@family.members.each do |m|
  puts m.age
end
# it still the old age

Я хотел бы использовать @ family.save после вызова метода старения, но, похоже, это не работает, я хотел бы сохранить это, только если всепроверки выполнены.Это просто пример, чтобы упростить то, что мне нужно

1 Ответ

1 голос
/ 25 января 2012

members.find_all_by_birthday(date) выполняет отдельный запрос, чтобы вернуть вам коллекцию членов, а не извлекать всех членов для семьи в ассоциацию, а затем сократить ее до тех, у которых есть соответствующий день рождения.

Вы можетеdo:

members.select { |m| m.birthday == date }.each do |m|
  m.age = m.age + 1
end

Что изменит членов на месте.Недостатком является то, что они извлекают их все из базы данных, чего не делает find_all_by_birthday, а просто выбирают те, которые вам нужны.

...