Rails has_many关联更改为父模型不反映?

时间:2012-01-25 14:18:36

标签: ruby-on-rails activerecord has-many

例如,我有这个:

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 个答案:

答案 0 :(得分:1)

members.find_all_by_birthday(date)执行单独的查询以返回成员集合,而不是将该族的所有成员提取到关联中,然后将其减少为具有相应生日的成员。

你可以这样做:

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

将修改成员。它的缺点是从数据库中获取它们find_all_by_birthday没有,因为它只是获取你想要的数据库。