您好我尝试根据可事件类型创建活动。可事件类型是团体或商店。
编写我的代码,我目前确定他们是创建我的路由和控制器的更好方法(仍然是新手)
有没有办法在可事件类型中只创建一个new和create方法传递?
型号:
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"
答案 0 :(得分:0)
如果它只是您关注的路由,而不是操作的数量,您可以使用约束来允许单个路径变量将请求发送到多个操作之一,这在某些情况下很有用您可能希望从多个操作中有多个按钮,从单个表单读取,或者您只想简化路径变量命名。
使用commit_param_routing gem并在您的路线文件中,您可以编写如下内容:
resources :events do
collection do
post :save, constraints: CommitParamRouting.new(EventController::CREATENATIONAL), action: :create_national_event
post :save, constraints: CommitParamRouting.new(EventController::CREATELOCAL), action: :create_local_event
end
end
将常量添加到控制器:
class EventController
CREATENATIONAL = "create national"
CREATELOCAL = "create local"
.....
end
然后剩下的就是将它们添加到您的视图文件提交按钮:
div class="form-actions"
.row
.col-xs-2
=f.submit EventController::CREATENATIONAL
.col-xs-2
=f.submit EventController::CREATELOCAL
对不起,如果它不是你想要的或不清楚的,我的第一个答案!