如何更新相关记录只有它存在?

时间:2015-02-08 16:46:31

标签: ruby-on-rails ruby activerecord

在我的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

基本上,每个invoice都有一个sender。创建发票后,应自动创建发件人记录。如果发票已更新(而非已创建),则应简单更新发件人记录。

我上面的代码有效。但有没有更简洁的方法来做到这一点?像 create_or_update 这样的东西?

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

你可以缩短病情。

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

IMO写入可读代码比短代码更重要。我不确定我更喜欢哪个版本 - 可能是你的...