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

时间:2014-02-23 22:16:19

标签: ruby-on-rails ruby

userevent具有has 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

在我的事件控制器中,我想为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

虽然感觉很重,但我认为这样做有更好的“Rails方式”。什么是正确的方法?

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

def create
  @event = Event.new(event_params)
  @event.users.add(User.find(current_user.id))
  @event.save # I guess that you want to save the relation
end

答案 2 :(得分:0)

这取决于params带来了什么以及它们的格式。如果是表单提交并且它带来了user_id,那么您应该能够创建事件

user = User.find(params [:user_id]) user.events&lt;&lt; Event.new(PARAMS [:事件])

如果您想将其添加到current_user:

current_user.events << Event.new(params[:event])

如你所见,一切都取决于参数的传递方式以及你从哪里获取用户。

这些是一些选择。