如何在组和用户之间创建联合操作?

问题描述:

user.rb
has_many :memberships, :dependent => :destroy 
    has_many :groups, :through => :memberships 

membership.rb
class Membership < ActiveRecord::Base 
    attr_accessible :user_id, :group_id 
    belongs_to :user 
    belongs_to :group 
    validates_uniqueness_of :user_id, :message => "You can only join one group!" 

end 

group.rb
has_many :memberships, :dependent => :destroy 
has_many :users, :through => :memberships 

groups_controller.rb
def join 
    @group = Group.find(params[:id]) 
    @m = @group.memberships.build(:user_id => current_user.id) 
    respond_to do |format| 
     if @m.save 
     format.html { redirect_to(@group, :notice => 'You have joined this group.') } 
     format.xml { head :ok } 
     else 
     format.html { redirect_to(@group, :notice => 'Join error.') } 
     format.xml { render :xml => @group.errors, :status => :unprocessable_entity } 
     end 
    end 
    end 

memberships_controller.rb

class MembershipsController < ApplicationController 
before_filter :authenticate_user! 
    def create 
    @membership = current_user.memberships.build(:group_id => params[:group_id]) 
    if @membership.save 
     flash[:notice] = "You have joined this group." 
     redirect_to :back 
    else 
     flash[:error] = "Unable to join." 
     redirect_to :back 
    end 
    end 

    def destroy 
    @membership = current_user.memberships.find(params[:id]) 
    @membership.destroy 
    flash[:notice] = "Removed membership." 
     redirect_to :back 
    end 
end 

用户通过会员模式是一个连接表的组。我的问题。如何为用户点击以创建联接操作以便他们可以加入组?如何在组和用户之间创建联合操作?

+0

从我所看到的,你已经使用户以两种方式加入,从用户到组或从一个组到'current_user',究竟是什么问题? – Draiken 2011-08-26 17:35:42

您已完成步骤1,即添加控制器操作。现在,您只需添加适当的路线并将其连接到视图中即可。

在你routes.rb

resources :groups do 
    get 'join', :on => :member 
end 

在你的视图文件:

<%= link_to "Join this group", join_group_path(@group) %>

这就是它!