0

在我的 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 - 您是否建议以相同的方法保存两次,或者有更好的方法吗?

4

2 回答 2

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回调。

于 2013-10-09T12:33:06.313 回答
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
于 2013-10-09T12:35:12.280 回答