0

これが私のセットアップです: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 を新しいコントローラーに渡しているのは奇妙ですが、作成コントローラーに渡すと機能しません。

4

1 に答える 1

0

I don't see the code for that submit button, but since that submit button sends a form, you need to pass the parameter as a hidden field(either hidden_field or hidden_field_tag. Arguments after the ? in the path in an HTML form's action simply won't get passed.

于 2013-07-07T21:43:12.247 に答える