2012-01-25 60 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與另一臺服務器的集成,如果我沒有得到來自其他服務器的響應,我無法保存'家庭',並使用交易我會必須將所有的邏輯權利交給控制器? –

相關問題