2014-01-19 45 views
0

我对Rails很感兴趣,并试图学习。我有一个用户表一个事件表和一个UserEvent连接表。当用户创建一个事件时,它们被添加到连接表中。但是,我希望除事件创建者以外的其他用户能够点击“加入事件”按钮并将他或她自己添加到UserEvent连接表中,以便我可以知道有多少人正在参加事件。我该如何着手设置?我需要创建一个UserEvent控制器吗?一旦功能允许,我对如何解决这个问题感到非常困惑,而不知道如何使用counter_cache。添加到连接表

资源如下:

resources :users do 
    resources :activities 
    end 
    resources :activities, only: [:index, :show] 

    resources :users do 
    resources :events 
    end 
+0

你可以只需在事件控制器中进行。当与用户关联的用户创建事件时,记录会自动添加到连接表中。只要确保关系在模型中正确定义。 –

回答

1

可以使用<< ActiveRecord的方法(I found out about here)做加入协会

这里是你能做什么:

#config/routes.rb 
resources :events do 
    member do 
     post :join 
    end 
end 

#app/controllers/events_controller.rb 
def show 
    @event = Event.find(params[:event_id]) 
end 

def join 
    @event = Event.find(params[:event_id]) 
    @event.users << params[:user_id] #might need more than just params[:user_id] 

    redirect_to root_path 
end 

#app/models/event.rb 
Class Event < ActiveRecord::Base 
    has_many :user_events 
    has_many :users, through: :user_events 
end 

#app/views/events/show.html.erb 
#will need to pass user_id somehow (use form) 
<%= link_to "Join", event_join_path(@event), method: :post, data: {confirm: "Really Join?"} %> 
+0

尝试点击“加入”按钮时出现以下错误。有什么想法吗? “没有路线匹配[GET]”/ users/1/events/26/join“” – John

+1

将'link_to'更改为'button_to'。这将生成一个POST操作而不是GET。 –

+0

lol对不起,我应该把方法::在链接发布!赞扬回答 –