Пользователи «администраторов» создают события. Поэтому каждое событие имеет свой собственный URL-адрес, например «events/1». На общедоступном сайте (т. Е. Не требуется аутентификация). Член общественности может купить билеты на мероприятие. Все, что нужно администратору, это опубликовать общедоступный URL-адрес, т. Е. «Event/1», и он дает форму для покупателя, который должен заполнить заявку.Не удается получить ассоциации для работы
Я не могу заставить Ticket_buyers быть связанными с их соответствующим событием (т.е. событие/1). Вот результат выполнения Event.first.ticket_buyers в командной строке, которая ничего не показывает в массиве, даже если я заселена первое событие с данными ticket_buyer с помощью формы приложения (не команда API):
irb(main):001:0> Event.first.ticket_buyers
Event Load (0.0ms) SELECT "events".* FROM "events" ORDER BY "events"."id" ASC LIMIT 1
TicketBuyer Load (1.0ms) SELECT "ticket_buyers".* FROM "ticket_buyers" WHERE "ticket_buyers"."event_id" = ? [["event_id", 1]]
=> #<ActiveRecord::Associations::CollectionProxy []>
Event модель
class Event < ActiveRecord::Base
belongs_to :admin
has_many :ticket_buyers, dependent: :destroy
end
TicketBuyer модель
class TicketBuyer < ActiveRecord::Base
belongs_to :event
end
События Контроллер
class EventsController < ApplicationController
before_filter :authenticate_admin!, :except => :show
def index
@events = current_admin.events
end
def show
@event = Event.find(params[:id])
@ticket_buyers = TicketBuyer.new
end
def new
@event = current_admin.events.build
@event.admin = current_admin
end
def create
@event = current_admin.events.build(event_params)
if @event.save
redirect_to @event
else
render 'new'
end
end
private
def event_params
params.require(:event).permit(:name_of_event, ticket_buyer_attributes: [:full_name, :number_of_tickets])
end
end
Покупатели билетов Контроллер
class TicketBuyersController < ApplicationController
before_action :authenticate_admin!, :except => [:new, :create]
def index
@ticket_buyer = TicketBuyer.all
end
def show
@ticket_buyer = TicketBuyer.find(params[:id])
@event = Event.find(params[:event_id])
end
def new
@ticket_buyer = TicketBuyer.new
end
def create
@ticket_buyer = TicketBuyer.new(ticket_buyer_params)
if @ticket_buyer.save
redirect_to localhost:3000
else
render('new')
end
end
private
def set_ticket_buyer
@ticket_buyer = Ticket_buyer.find(params[:id])
end
def ticket_buyer_params
params.require(:ticket_buyer).permit(:full_name, :number_of_tickets)
end
end
Схема базы данных
ActiveRecord::Schema.define(version: 20160705212350) do
create_table "admins", force: :cascade do |t|
t.string "email", default: "", null: false
t.string "encrypted_password", default: "", null: false
t.string "reset_password_token"
t.datetime "reset_password_sent_at"
t.datetime "remember_created_at"
t.integer "sign_in_count", default: 0, null: false
t.datetime "current_sign_in_at"
t.datetime "last_sign_in_at"
t.string "current_sign_in_ip"
t.string "last_sign_in_ip"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
t.string "full_name"
end
add_index "admins", ["email"], name: "index_admins_on_email", unique: true
add_index "admins", ["reset_password_token"], name: "index_admins_on_reset_password_token", unique: true
create_table "events", force: :cascade do |t|
t.text "name_of_event"
t.integer "admin_id"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
end
add_index "events", ["admin_id"], name: "index_events_on_admin_id"
create_table "ticket_buyers", force: :cascade do |t|
t.text "full_name"
t.integer "event_id"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
end
add_index "ticket_buyers", ["event_id"], name: "index_ticket_buyers_on_event_id"
end
routes.rb
Rails.application.routes.draw do
devise_for :admins
resources :events do
resources :ticket_buyers do
end
end
ticket_buyers/index.html.erb
<p id="notice"><%= notice %></p>
<table class='table table-striped table-hover'>
<thead>
<tr>
<th>Name</th>
<th>Number of tickets</th>
<th colspan="4"></th>
</tr>
</thead>
<tbody>
<% @ticket_buyer.each do |ticket_buyer| %>
<tr class="<%= cycle('list_line_odd', 'list_line_even') %>">
<tr>
<td><%= link_to ticket_buyer.full_name %></td>
<td><%= link_to ticket_buyer.number_of_tickets %></td>
</tr>
<% end %>
</tbody>
</table>
<%= link_to 'Back', events_path %>
Я сделал изменения, предложенные в вашем UPDATE, и я получил следующее сообщение об ошибке на локальном хосте: 3000/События/event_id/ticket_buyers: – Tkendall