我使用Ruby on Rails 4.1創建了一個訂票應用程序,作爲我的示例項目。三種模式 - 活動,門票和預訂。活動有許多門票和預訂。門票有很多預訂,它們屬於事件。預訂屬於活動和門票。嵌套資源 - 無方法錯誤
的路由文件看起來像:
Rails.application.routes.draw do
resources :charges
root 'events#index'
resources :events do
resources :tickets
resources :bookings
end
end
的按鈕,它具有以下代碼的新的預訂頁面位於我的事件/節目頁:
<% @event.tickets.each do |ticket| %>
<div class="row">
<div class="col-md-8">
<table class="table">
<thead>
<tr>
<th>Name</th>
<th>Price</th>
<th>Quantity</th>
</tr>
</thead>
<tbody>
<tr>
<td><%= ticket.ticket_name %></td>
<td><%= ticket.ticket_price %></td>
<td><%= ticket.ticket_quantity %></td>
<td><%= link_to "Buy Now", new_event_booking_path(@event, ticket), class: "btn btn-primary" %></td>
<td><%= link_to "Edit", edit_event_ticket_path(@event, ticket), class: "btn btn-link" %></td>
<td><%= link_to "Delete", event_ticket_path(@event, ticket), method: :delete, data: { confirm: "Are you sure?" }, class: "btn btn-link" %></td>
</tr>
</table>
</div>
</div>
由於你可以看到,當用戶點擊「立即購買」按鈕時,事件和票據變量被抓取。然而,當我在我的預約控制器使用下面的代碼:
class BookingsController < ApplicationController
def new
@event = Event.find(params[:event_id])
@ticket = @event.tickets.find(params[:id])
@booking = Booking.new
end
def create
@event = Event.find(params[:event_id])
@ticket = @event.tickets.find(params[: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
我得到的ActiveRecord :: RecordNotFound在BookingsController#新。如果沒有ID錯誤,找不到票證。
新頁面看起來像這樣(初具雛形,我對功能性測試)
<%= form_for ([@event, @booking]) do |f| %>
<div class="row">
<div class="form-group">
<%= f.label :buyer_name %>
<%= f.text_field :buyer_name, class: "form-control" %>
</div>
<div class="form-group">
<%= f.label :order_quantity %>
<%= f.text_field :order_quantity, class: "form-control" %>
</div>
</div>
<%= f.submit "Pay now", class: "btn btn-primary" %>
的活動型號:
has_many :tickets, dependent: :destroy
has_many :bookings
has_many :charges
門票模式:
belongs_to :event
has_many :bookings
預訂模式:
belongs_to :event
belongs_to :ticket
has_many :charges
的外鍵關聯看起來是這樣的:
add_reference :bookings, :ticket, index: true
如何解決這個問題?
我認爲'new_event_booking_path(@event,ticket)'發送了錯誤的參數。 'params [:id]'是零。 – xlembouras
你有這個GitHub頁嗎? –
@DougSteinberg你走吧。 https://bitbucket.org/stravarius/ticket-fire – user3224820