2014-02-23 109 views
0

usereventhas many: through的關係。如何在Rails中創建連接表記錄,有很多:通過關係

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

對於一個擴展的響應,請參閱'https:// stackoverflow.com/questions/7297338/how-to-add-records-to-have-many-through-association-in-rails#answer-18114492' – Newben

回答

4
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
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 
+0

像這個答案,但我得到一個錯誤:未定義的方法'添加'爲#

+0

好的。嘗試新的答案。我猜錯你在current_user中有一個用戶實體。 – eKek0

0

這取決於什麼PARAMS正在把它們的格式設置。如果它是一個表單提交和它帶來的user_id,你應該能夠只是創建事件

用戶= User.find(PARAMS [:USER_ID]) user.events < < Event.new(PARAMS [:事件])

如果您想將其添加到CURRENT_USER:

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

正如你看到的這一切都取決於是否存在params是如何被傳遞,並在那裏你得到來自用戶。

這些是幾個選項。

相關問題