Ruby 轨道4-Can和x27;无法让用户以参与者身份正确加入活动

Ruby 轨道4-Can和x27;无法让用户以参与者身份正确加入活动,ruby,ruby-on-rails-4,Ruby,Ruby On Rails 4,我想它在我的控制器逻辑中的某个地方,只是无法理解。单击“加入事件”时,我无法获取参与者id以进入事件,因此我可以在视图中使用event.participants。我可以很好地创建活动,让主持人很好地工作,只有参与者 我会展示我的人际关系,我相信这是可以的 User.rb class User < ActiveRecord::Base devise :database_authenticatable, :registerable, :recoverable, :rememberab

我想它在我的控制器逻辑中的某个地方,只是无法理解。单击“加入事件”时,我无法获取参与者id以进入事件,因此我可以在视图中使用event.participants。我可以很好地创建活动,让主持人很好地工作,只有参与者

我会展示我的人际关系,我相信这是可以的

User.rb

class User < ActiveRecord::Base

    devise :database_authenticatable, :registerable, :recoverable, :rememberable, :trackable, :validatable

    has_many :events_participants, foreign_key: :participant_id
    has_many :events, through: :events_participants
    has_many :hosted_events, class_name: "Event", foreign_key: :host_id
    has_one :workplace

    validates :email, format: { with: /\A([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})\z/i, on: :create }
end
(14.0ms)提交


因此,我可以看到它正在将一个与当前用户id相同的参与者id插入EventParticipants表中,但我不知道如何将这一切放在一起。

在ParticipantsController#Create中,由于没有
事件,您似乎没有保存已更新的事件对象。保存
可能需要查看为此操作触发的HTML,因为您有两个看起来不相关的单独控制器操作。event.participants是否在事件控制器操作中生成?如果是这样的话,那么你也需要在
事件参数中包含这些参数。我认为我把它复杂化了,把自己和名称空间混淆了。参与者从未真正创建过。首先使用主机创建一个事件。然后还有一个按钮,其他人可以在以后加入该事件。我建议将pry gem添加到开发中,并在为加入操作(我假设是EventParticipantsController#Create)触发的代码中打开一个
绑定。pry
会话用于测试语法是否正常工作,特别是这个流程:
event=event.find(params[:event\u id])
participant=current\u user
,以及
event.participants您可能是对的。我明天会尝试一下,因为我很遗憾没有带我的comp。
class Event < ActiveRecord::Base
  has_many :events_participants
  has_many :participants, through: :events_participants
  belongs_to :host, class_name: "User"

  validates :spots, presence: true, allow_blank: false
  validates :title, presence: true, allow_blank: false
  default_scope -> {order(time: :asc)}
end
class EventsParticipant < ActiveRecord::Base
  belongs_to :event
  belongs_to :participant, class_name: "User"
end
class EventsController < InheritedResources::Base
  before_action :authenticate_user!, only: [:create,:update]
  before_action :find_event, only: [:show,:update,:edit,:destroy]

  def create
      @event = Event.new(event_params.merge(host_id: current_user.id))
      @event.save
      redirect_to root_path
  end

  def index
      @events = Event.all
  end

  def update
      @event.update_attributes(event_params)
      redirect_to @event
  end

  def destroy
      @event.destroy
      redirect_to root_path
  end

private

  def find_event
      @event = Event.find(params[:id])
  end

  def event_params
    params.require(:event).permit(:time, :title, :spots, :host_id)
  end
end
class ParticipantsController < ApplicationController
    def create
      event = Event.find(params[:event_id])
      participant = current_user
      event.participants << current_user
      redirect_to event
    end

    def destroy
      EventsParticipant.where(event_id: params[:event_id], participant_id: params[:id])[0].destroy()
      redirect_to Event.find(params[:event_id])
  end
end
 SQL (0.2ms)  INSERT INTO "events_participants" ("event_id", "participant_id", "created_at", "updated_at") VALUES ($1, $2, $3, $4) RETURNING "id"  [["event_id", 12], ["participant_id", 2], ["created_at", "2015-04-01 18:45:34.458668"], ["updated_at", "2015-04-01 18:45:34.458668"]]