2014-07-18 100 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