У меня есть приложение, которое имеет модель объекта, в каждом месте есть много событий, и каждое событие имеет много sign_ups как signupable (у меня есть еще одна модель, которая также имеет регистрацию). Моя проблема заключается в том, что я пытаюсь создать подписку на конкретное событие со страницы места. Вот мой соответствующий код:Rails 5 контроллер before_action метод не принимает формы params
Модели:
# app/models/venue.rb
class Venue < ApplicationRecord
has_many :events, dependent: :destroy
end
# app/models/event.rb
class Event < ApplicationRecord
belongs_to :venue
has_many :sign_ups, as: :signupable
end
# app/models/sign_up.rb
class SignUp < ApplicationRecord
belongs_to :signupable, polymorphic: true
end
Контроллеры:
#app/controllers.sign_ups_controller.rb
class SignUpsController < ApplicationController
before_action :find_signupable
def new
@sign_up = SignUp.new
end
def create
@sign_up = @signupable.sign_ups.new sign_up_params
if @sign_up.save
redirect_to :back
flash[:notice] = 'Your submission was received!'
else
redirect_to :back
flash[:danger] = "Error: #{@sign_up.errors.full_messages.to_sentence}"
end
end
private
def sign_up_params
params.require(:sign_up).permit(:first_name, :last_name, :phone, :email, :num_guys, :num_girls, :date)
end
def find_signupable
@signupable = Event.find(params[:event_id]) if params[:event_id]
@signupable = Event.find(params[:event]) if params[:event]
end
end
Форма:
# app/views/venues/_sign_up_form.html.html
= form_for [@venue, SignUp.new] do |f|
.form-group
%label{ :for => "event" } Event ID
= f.select :event, options_from_collection_for_select(@venue.events, :id, :name), {:prompt => "Select Date"}, {class: "form-control", id: "event"}
.form-group
= f.submit "Submit", class: "form-control"
Когда я пытаюсь отправить форму, я получаю следующее сообщение об ошибке:
NoMethodError at /venues/20/sign_ups
undefined method `sign_ups' for nil:NilClass
Я довольно новичок в рельсах и не уверен, что я делаю неправильно. Я предполагаю, что find_signupable
не получает params[:event]
.