2012-04-23 5 views
0

привет им просто интересно, если почему сессия не может найти свою оговорку при обновлении и использовать его в другом контроллеренеопределенного метод `build_book_reservation

это мой ApplicationController

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 
    @[email protected]_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 method build_book_reservation»для ноль: NilClass` ошибка


модель/book_reservation.rb

belongs_to :reservation 

модель/reservation.rb

has_one :book_reservation 

ответ

0

Причина ошибки не вы никогда не установить сеанс, но вы пытались получить доступ it.In ваше использование контроллера приложения

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 
    @[email protected]_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 ,

+0

hi попробовал ваше предложение, и теперь он сработал, он поднимет различную ошибку 'undefined method' build_book_reservation 'для nil: NilClass', это может быть из темы, просто интересно, знаете ли вы, почему это произошло, просто измените мой пост, спасибо заранее :) – Led

+0

Добавьте puts @reservation в свой метод создания и скажите мне, какой результат вы получаете? –

+0

какой тип положить как журнал? извините im new in ruby ​​:( – Led

0

Вы никогда не ставить :reservation_id в сессии.

Это означает, что session[:reservation_id] является nil и Reservation.find(nil) вызывает такое исключение, которое вы видите.

+0

Умм это то, что вы имеете в виду? 'booking = Reservation.find (session [: reservation_id])' извините за мою тупость, которую я сейчас изучаю – Led

+0

Да, это тот. Я отредактировал ответ, чтобы попытаться быть более ясным. – Sionide21

+0

спасибо только за следующий вопрос, я просто редактирую свой пост, я делаю это правильно? – Led

Смежные вопросы