0

app/controllers/bookings_controller.rb:45:in `create'

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

:appointment_id を持つ予約オブジェクトを作成したい

これが私のコードです:

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

予約管理者:

def new
    @appointment = Appointment.find(params[:appointment_id])
    @booking = @appointment.bookings.new 
    ...

 def create
I was missing [:booking] in line 45. 
 Line 45:   @appointment = Appointment.find(params[:booking][:appointment_id])
     @booking = @appointment.bookings.new(params[:booking])

ルート

resources :appointments do
    resources :bookings
end

Bookings_form を送信すると、正しいアポイントメント ID が渡されますが、次のエラーが表示されます。

ActiveRecord::RecordNotFound in BookingsController#create
Couldn't find Appointment without an ID

予約フォーム

<%= simple_form_for(@booking) do |f| %>
  <%= f.error_notification %>

  <div class="form-inputs">
    <%= f.input :appointment_date %>
    <%= f.input :start_time %>
    <%= f.input :end_time %>
    <%= f.input :name %>
    <%= f.input :phone_number %>
    <%= f.hidden_field :appointment_id%>  

 <div class="form-actions">
     <%= f.button :submit %>
  </div>
4

1 に答える 1

1

アポイントメントIDをcreateメソッドに戻していません。

このcreateメソッドは、フォーム入力からparamsハッシュを介して渡される情報以外は何も知りません。のフォームにフィールドを追加していないappointment_idため、コントローラーに渡されず、createメソッドで使用できません。

これを回避するには、次のようにフォームに新しい非表示の入力を追加します。

<%= f.input :appointment_id, :type => :hidden %>

これで、フォームの投稿を介してIDを明示的に渡すため、コントローラーで使用できるようになります。

于 2012-09-30T23:08:45.983 に答える