0

Rails 4 アプリには 2 つのフィールドがあります。デフォルト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 回保存することをお勧めしますか、それともより良い方法がありますか?

4

2 に答える 2

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 に答える
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 に答える