0

こんにちは、なぜセッションが更新時に予約を見つけられず、他のコントローラーで使用されたのか疑問に思っています

これは私のアプリケーションコントローラーです

  helper :all # include all helpers, all the time


     private
 def current_reservation
   @reservation ||= Reservation.find(session[:reservation_id]) if session[:reservation_id]
   #last assigned value will be returned as default.
 end

 def create_reservation_session(id)
   session[:reservation_id] = id
 end

 def destroy_reservation_session
   session[:reservation_id] = nil
 end

ここで私たちにそれをしようとしています

 def new
   @book_reservation = BookReservation.new
 end

def create
  @reservation = current_reservation
  @book_reservation=@reservation.build_book_reservation(params[:book_reservation])
  if @book_reservation.save
    #If success set session
    create_reservation_session(@reservation.id)
    #redirect_to root_url, :notice => "Successfully created book reservation."
  else
    render :action => 'new'
  end
 end

undefined methodnil:NilClass` エラーに対して build_book_reservation' が発生します


model/book_reservation.rb

 belongs_to :reservation

モデル/予約.rb

has_one :book_reservation
4

2 に答える 2

0

エラーの原因は、セッションを設定したことがないのにアクセスしようとしたことです。アプリケーションコントローラーで使用します

private
 def current_reservation
   @reservation ||= Reservation.find(session[:reservation_id]) if session[:reservation_id]
   #last assigned value will be returned as default.
 end

 def create_reservation_session(id)
   session[:reservation_id] = id
 end

 def destroy_reservation_session
   session[:reservation_id] = nil
 end

コントローラーで

 def new
   @book_reservation = BookReservation.new
 end

def create
  @reservation = Reservation.find(params[:reservation_id])
  if @reservation
    @book_reservation=@reservation.build_book_reservation(params[:book_reservation])
    if @book_reservation.save
      #If success set session
      create_reservation_session(@reservation.id)
      #redirect_to root_url, :notice => "Successfully created book reservation."
    else
      render :action => 'new'
    end
   else
      render :action => 'new'
   end

その後、必要なときにいつでも current_reservation を使用できます。

于 2012-04-23T11:53:06.267 に答える
0

:reservation_idセッションに参加することはありません。

これは、表示されている例外を発生させていることを意味session[:reservation_id]します。nilReservation.find(nil)

于 2012-04-23T11:28:13.617 に答える