如何在Rails中创建联接表记录,有很多:通过关系

Tre*_*ick 1 ruby ruby-on-rails

usereventhas many: through关系。

class User < ActiveRecord::Base
  has_many :user_events
  has_many :events, :through => :user_events
end

class Event < ActiveRecord::Base
  has_many :user_events
  has_many :users, :through => :user_events
end
Run Code Online (Sandbox Code Playgroud)

在我的事件控制器中,我想为User_events创建一条记录,我现在使用以下命令进行记录:

def create
  @event = Event.new(event_params)
  @user = User.find(current_user.id)
  @user_events = User.user_events.create
  @user_events.user_id = @user.id
  @user_events.event_id = @event.id
end
Run Code Online (Sandbox Code Playgroud)

但是,这感觉很沉重,因此我认为有一种更好,更“ Rails的方式”来做。正确的方法是什么?

Hes*_*ham 5

def create
  @event = Event.new(event_params)
  if @event.save
    @event.users << current_user
    redirect_to event_path(@event)
  else
    render action: :new
  end
end
Run Code Online (Sandbox Code Playgroud)