检索给定节目视图的id

时间:2016-09-23 01:34:50

标签: ruby-on-rails scope

我想在事件视图中添加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

1 个答案:

答案 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 :rsvpsrsvp 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 %>