例如,我有这个:
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但是它似乎不能那样工作,我想只在满足所有验证时保存它。这只是简化我需要的一个例子
答案 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
没有,因为它只是获取你想要的数据库。