0

ユーザーが新しい予約レコードを作成するとき、入力されるデータの一部は電子メール アドレスです。この電子メール アドレスは、まだ存在しない場合に、新しいゲスト レコードを同時に作成するために使用されます。予約には、レコードの一部としてゲスト ID が必要です。

私のモデルでは、関係を次のように定義しました。

accommodations has_many bookings
guests has_many bookings
bookings belongs_to accommodations
bookings belongs_to guests

これは、BookingsController の作成アクションでこれまでに行ったことです。

...
def create
  accommodation = current_user.accommodation    
  @booking = accommodation.bookings.build(post_params)
  @guest = accommodation.guests.build(params[:email])

  if @booking.save  
    flash[:success] = 'The booking has been added successfully.'  
    redirect_to :controller => 'bookings', :action => 'index'
  else
    render 'new'
  end
end
...

私の質問は次のとおりです。

  • 新しい予約にゲスト ID を含めるには、'build' を 2 回使用する必要がありますか?
  • 電子メールを使用してゲストが既に存在するかどうかを確認するにはどうすればよいですか?
  • ゲストをビルドするときに params[:email] を使用するのは安全ですか?
4

1 に答える 1

1

ビューで使用@guestしていない場合は、インスタンス変数にする必要はありません。そう:

accommodation = current_user.accommodation
guest = Guest.find_or_create_by(:email => params[:email])
@booking = accommodation.bookings.new(post_params.merge(:guest_id => guest.id))

buildメソッドで使用する必要はありません#create。主な用途は、まだ主キーを持たないオブジェクトとの関連付けを維持することだからです。しかし、あなたはここに自分のものを保持しているので、newRuby の古き良きものを使うことができます。

于 2013-09-07T19:24:09.477 に答える