2015-02-08 130 views
0

在我的Rails應用4我有兩個模型:如何僅在相關記錄存在時更新相關記錄?

class Invoice < ActiveRecord::Base 

    has_one :sender 

    before_save :save_sender 

    private 

    def save_sender    
    if sender.present? 
     sender.update_attributes(user.profile.sender_fields) 
    else 
     build_sender(user.profile.sender_fields) 
    end 
    end 

end 

class Sender < ActiveRecord::Base 

    belongs_to :invoice 

end 

基本上,每個invoicesender。創建發票後,應自動創建發件人記錄。如果發票是已更新(而不是已創建),則應簡單更新發件人記錄。

我上面的代碼工作。但是,有沒有更簡潔的方法來做到這一點?像create_or_update

感謝您的任何幫助。

回答

0

您可以縮短條件。

def save_sender 
    self.sender ||= build_sender 
    sender.update_attributes(user.profile.sender_fields) 
end 

IMO比短代碼更重要的是編寫可讀代碼。我不確定哪個版本我更喜歡 - 可能是你的...