在我的Rails 4应用中,我有两个字段 - 默认id
和一个名为friendly_id
的字段,其中应包含一些随机的大写字母和id
。例如
如果id = 354 ,friendly_id可能= HDG354
从我的控制器中,我在我的模型中调用这样的方法:
@booking.save_and_send
其中@booking是预订的新实例。
在我的模特中,我有:
def save_and_send
if valid?
self.friendly_id = 3.times.map { [*'A'..'Z'].sample }.join + self.id.to_s
save!
GuestMailer.booking_created(self).deliver
end
end
但当然如果实例尚未保存,我就无法使用该ID - 您是否建议在同一方法中保存两次,或者有更好的方法吗?
答案 0 :(得分:1)
你为什么不换位?
def save_and_send
if valid?
save!
self.update_attributes(friendly_id: 3.times.map { [*'A'..'Z'].sample }.join + self.id.to_s)
GuestMailer.booking_created(self).deliver
end
end
实现此目标的更好方法可能是创建after_create
回调。
答案 1 :(得分:1)
将其放入after_create
回调:
after_create do |booking|
booking.update_attributes(friendly_id: 3.times.map { [*'A'..'Z'].sample }.join + booking.id.to_s)
GuestMailer.booking_created(booking).deliver
end