これが私のセットアップです:Rails 3.2.13
新規のパラメータ「restaurant_id」をすでに渡しており、作成の送信ボタンを介して同じパラメータを渡そうとしています。ただし、create のパラメーターを認識していないようです。
新規の場合:
<%= link_to t('.new', :default => t("helpers.links.new")),
new_reservation_path(:restaurant_id => restaurant.id),
:class => 'btn btn-primary' %>
これにより、コントローラーで new の restaurant.id が適切に渡されます。次に、新しいビューに送信ボタンがあります。
作成する場合:
<%= link_to t('.cancel', :default => t("helpers.links.cancel")),
reservations_path(:restaurant_id => @restaurant.id), :class => 'btn' %>
ここでやりたいことは、オブジェクトを作成して保存するときに、restaurant.id をもう一度渡すことです。ただし、create メソッドには表示されません。@restaurant.id は、それ自体で正しい ID を有効に生成しますが、通過しません。
これが私のコントローラーです:
class ReservationsController < ApplicationController
def new
@reservation = Restaurant.find(params[:restaurant_id]).reservations.new
@restaurant = Restaurant.find(params[:restaurant_id])
end
def create
@reservation = Restaurant.find(params[:restaurant_id]).reservations.new(params[:reservation])
if @reservation.save
redirect_to root_url, notice: 'Reservation was successfully created.'
else
render action: "new", notice: 'There was an error.'
end
end
end
レストランを見つけようとすると、No ID エラーが発生します。
ActiveRecord::RecordNotFound in ReservationsController#create
Couldn't find Restaurant without an ID
:restaurant_id のコントローラーでテストすると、空白が返されます。
まったく同じ方法を使用して :restaurant_id を新しいコントローラーに渡しているのは奇妙ですが、作成コントローラーに渡すと機能しません。