Привет Я пытаюсь создать событие в зависимости от типа события. допустимый тип - это группа или магазин.Rails Polymorphic - controller & views
Дать свой код, я в настоящее время уверен, что их лучший способ создать свои маршруты и контроллер (до сих пор рельсы новичка)
Есть ли способ, чтобы создать только один новый и создать метод пропуска в eventable тип ?
Модели:
class Event < ActiveRecord::Base
belongs_to :eventable, polymorphic: true
class Group < ActiveRecord::Base
has_many :events, as: :eventable
class Shop < ActiveRecord::Base
has_many :events, as: :eventable
Маршруты:
resources :events do
collection do
get :new_national_event
get :new_local_event
post :create_national_event
post :create_local_event
end
do
событий контроллера:
def index
@search = Search.new(params[:search])
@shop = find_user_shop(@search.shop_id)
@group = @shop.group
@shop_events = @shop.events
@group_events = @group.events
end
def new_national_event
@user = current_user
@event = @user.group.events.new
end
def new_local_event
@shop = find_user_shop(@search.shop_id)
@event = @shop.events.new
end
def create_national_event
user = current_user
@event = user.group.events
if @event.save!
flash.now[:notice] = "Votre événement national a bien été enregistré"
render :index
else
flash.now[:error] = "Erreur lors de l'enregistrement du événement national"
render :new
end
end
def create_local_event
user = current_user
@event = user.group.shop.events
if @event.save!
flash.now[:notice] = "Votre événement local a bien été enregistré"
render :index
else
flash.now[:error] = "Erreur lors de l'enregistrement du événement local"
render :new
end
end
просмотров:
index.html.slim
= link_to new_national_event_events_path
= link_to new_local_event_events_path
new_national_event_events_path.html.slim
= form_for @event, :url => create_national_event_events_path, :method => :post do |f|
div class="field"
= f.text_field :title, :required => true
div class="field"
= f.text_field :threshold, :required => true
div class="form-actions"
=f.submit "Create", class: "btn blue"
Я забыл упомянуть об этом, также добавляет переменную пути маршрута для вас, и оба используют одно и то же имя пути, сохраняя простую маршрутизацию, и они просто направляются на разные действия через константу, которую вы выбираете –