0

AppointmentsオブジェクトとBookingsオブジェクトがあります。予約はAppointmentsに属し、Appointmentshas_manyの予約があります。

作成時に予約IDをbookings.appointment_idに渡したい。これどうやってするの?

*jordanandreeの提案に応じてコードを編集しました。今、私は次のエラーを受け取っています:

NoMethodError in BookingsController#new
undefined method `bookings' for nil:NilClass 

私のホームページビューには次のものがあります。

<% @appointments.each do |appointment| %>
    <%= link_to "new Booking", new_appointment_booking_path(appointment)%>
<%end%>

予約コントローラー:

def new
    @booking = @appointment.bookings.new 
    ...

 def create
     @booking = @appointment.bookings.new(params[:booking])
    ...

ルート

resources :appointments do
    resources :bookings
 end

あなたの助けは大歓迎です。

レーキルート:

   POST   /appointments/:appointment_id/bookings(.:format)  bookings#create 
   GET    /appointments/:appointment_id/bookings/new(.:format)  bookings#new
   GET    /appointments/:appointment_id/bookings/:id/edit(.:format) bookings#edit
4

1 に答える 1

2

Railsアソシエーションを使用すると、既存のレコードに基づいてレコードを作成できます。あなたが現在持っているのは、フォームからコントローラーに渡すパラメーターで少しやり過ぎです。

たとえば、create予約モデルと予定モデルで宣言したのと同じ関連付けパターンに従うようにメソッドを変更できます。

@booking = @appointment.bookings.new(params[:booking])

これにより、すでに存在する@appointmentレコードのIDが取得され、新しい@bookingインスタンス変数に設定されます。

また、ネストされたリソースルーティングについても見ていきます。2つのモデルの現在のルートはわかりませんが、次のようになります。

resources :appointments do
  resources :bookings
end

これにより、フォームへのよりクリーンなアプローチが提供されますnew_booking_path。に変わりnew_appointment_booking_path(@appointment)ます。これにより、予定のIDが予約コントローラーに渡され、予約コントローラーで予定の関連レコードを作成できます。

于 2012-09-29T17:06:28.577 に答える