类user
和event
具有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方式”。什么是正确的方法?
答案 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])
如你所见,一切都取决于参数的传递方式以及你从哪里获取用户。
这些是一些选择。