2014-07-18 94 views
1

我使用Ruby on Rails 4.1爲我的示例項目創建了訂票應用程序。三種模式 - 活動,門票和預訂。活動有許多門票和預訂。門票有很多預訂,它們屬於事件。預訂屬於活動和門票。Rails 4 - BookingsController中的NoMethodError在使用嵌套資源時創建#

這裏的嵌套航線的樣子:

resources :events do 
    resources :tickets 
    resources :bookings 
end 

票控制器運行完美,這裏的控制器代碼:

class TicketsController < ApplicationController 
def index 
    @event = Event.find(params[:event_id]) 
    @tickets = @event.tickets.all 
end 

def show 
    @event = Event.find(params[:event_id]) 
    @ticket = @event.tickets.find(params[:id]) 
end 

def new 
    @event = Event.find(params[:event_id]) 
    @ticket = Ticket.new 
end 

def create 
    @event = Event.find(params[:event_id]) 
    @ticket = @event.tickets.create(ticket_params) 
    if @ticket.save 
     redirect_to [@event, @ticket] 
    else 
     render 'new' 
    end 
end 

def edit 
    @event = Event.find(params[:event_id]) 
    @ticket= @event.tickets.find(params[:id]) 
end 

def update 
    @event = Event.find(params[:event_id]) 
    @ticket = @event.tickets.find(params[:id]) 

    if @ticket.update(ticket_params) 
     redirect_to [@event, @ticket] 
    else 
     render 'edit' 
    end 
end 

def destroy 
    @event = Event.find(params[:event_id]) 
    @ticket = @event.tickets.find(params[:id]) 
    @ticket.destroy 
    redirect_to event_tickets_path 
end 


private 

def ticket_params 
    params.require(:ticket).permit(:ticket_name, :booking_start_date, :booking_end_date, :ticket_price, :ticket_quantity, :minimum_quantity, :maximum_quantity, :terms_conditions, :more_information) 
end 

然而,當我按照步驟創建預訂控制器,我收到一條錯誤消息:

NoMethodError in BookingsController#create 

undefined method `bookings' for #<Event:0x007f84dd6cc7a8> 

預訂控制器看起來是這樣的:

class BookingsController < ApplicationController 
def new 
@event = Event.find(params[:event_id]) 
@booking = Booking.new 
end 

def create 
    @event = Event.find(params[:event_id]) 
    @booking = @event.bookings.create(booking_params) 
    if @booking.save 
    redirect_to [@event, @booking] 
    else 
    render 'new' 
    end 
end 

def show 
    @event = Event.find(params[:event_id]) 
    @booking = @event.bookings.find(params[:id]) 
end 

private 

def booking_params 
    params.require(:booking).permit(:buyer_name, :email, :mobile, :address, :order_quantity) 
end 
end 

有人可以讓我知道我做錯了嗎?

+3

是否定義'的has_many:在'事件bookings' '模特? – MrYoshiji

回答

0

我認爲你忘了申報事件和預訂之間的關係,對事件的一面:請確保您有以下has_many

class Event < ActiveRecord::Base 
    has_many :bookings 
    # etc. 
+0

非常感謝你!我錯過了那一個。 – user3224820