使用新创建的ID作为另一个字段名称

时间:2013-10-09 12:24:47

标签: ruby-on-rails ruby-on-rails-4

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

2 个答案:

答案 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