我想在事件视图中添加RSVP按钮。对于RSVP控制器,如何检查用户已打开的视图的事件的ID,并检查它确实是事件视图?我应该在应用程序控制器中创建像current_event
这样的私有方法吗?
class RsvpsController < ApplicationController
def create
@rsvp = Rsvp.new(rsvp_params)
#@rsvp.event_id = ???
end
end
更新附加信息
我的模型看起来像这样
class Rsvp < ApplicationRecord
belongs_to :event
belongs_to :user
end
class Event < ApplicationRecord
has_many :rsvps
has_many :users, through: :rsvps
end
class User < ApplicationRecord
has_many :rsvps
has_many :events, through: :rsvps
end
答案 0 :(得分:1)
您确实没有提供有关您的申请的足够信息。事件如何与RSVP相关。我会做一些假设,但认为它会对你有所帮助。让我们说你的应用程序会有很多事件。事件有很多RSVP,RSVP属于事件。
通常,您的路线中会有类似的内容
Rails.application.routes.draw do
resources :events do
resources :rsvps
end
end
如果你运行rake routes
,你可能会看到类似这样的内容
Prefix Verb URI Pattern Controller#Action
event_rsvps GET /events/:event_id/rsvps(.:format) rsvps#index
POST /events/:event_id/rsvps(.:format) rsvps#create
new_event_rsvp GET /events/:event_id/rsvps/new(.:format) rsvps#new
edit_event_rsvp GET /events/:event_id/rsvps/:id/edit(.:format) rsvps#edit
event_rsvp GET /events/:event_id/rsvps/:id(.:format) rsvps#show
PATCH /events/:event_id/rsvps/:id(.:format) rsvps#update
PUT /events/:event_id/rsvps/:id(.:format) rsvps#update
DELETE /events/:event_id/rsvps/:id(.:format) rsvps#destroy
因此,您的button
应指向rsvps#new
控制器和操作。用户提交表单后,会调用rsvps
控制器和create
操作。
在此处,您可以使用event
@event = Event.find(params[:event_id])
由于event
has_many :rsvps
和rsvp
belongs_to :event
,您可以使用类似的内容创建rsvp
def创建
@event = Event.find(params [:event_id])
@rsvp = @ event.rsvps.create(rsvp_params)#strong params
if @rsvp.save
...
else
...
end
end
额外提示:在您的RSVP表单中,您需要将其更改为类似的内容,因为我们在事件下嵌套了RSVP。
<%= form_for [@event, @rsvp] do |f| %>
...
<% end %>