在我的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 这样的东西?
感谢您的帮助。
答案 0 :(得分:0)
你可以缩短病情。
def save_sender
self.sender ||= build_sender
sender.update_attributes(user.profile.sender_fields)
end
IMO写入可读代码比短代码更重要。我不确定我更喜欢哪个版本 - 可能是你的...