2012-01-25 37 views
0

例如,我有这个:Rails 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

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

你可以这样做:

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

这将修改成员到位。它的缺点是从数据库中提取所有数据库,因为它只是取得你想要的数据库。

+0

它的工作原理,但它是唯一的方法吗? –

+0

我不确定这是否只是*方式。这是*一种方式。你可以做一些更复杂的事情,并且覆盖家族中的“成员”方法,但我认为这将是一个过于复杂的方法。或者,您可以从不同的方向来解决问题。为什么在家人得救之前,会员无法得救?这两个保存是否可以在一个事务中完成,以便这些更改一起发生? – Shadwell

+0

问题是,我改变了很多来自'家庭'的属性,然后我有一个JSON与另一台服务器的集成,如果我没有得到来自其他服务器的响应,我无法保存'家庭',并使用交易我会必须将所有的逻辑权利交给控制器? –

相关问题