0

我正在使用has_many:通過關聯:用戶通過成員資格加入組。我在用戶模型中創建的一些方法遇到問題,以確定用戶是否是組的成員,並允許用戶加入和離開組。使用控制檯,memberships.find_by_group_id總是返回零。我不確定爲什麼,我認爲這可能是我設置has_many的方式:通過關聯,雖然經過多次查看並諮詢了railscasts/blogs,但似乎沒問題。如果你要我給您寄更多的信息,像schema.db什麼的,讓我知道我的has_many:通過用戶,組和會員的關聯在某些方法中造成麻煩

class User < ActiveRecord::Base 
has_many :memberships, :dependent => :destroy 
has_many :groups, :through => :memberships 
. 
. 
. 
    def member?(group) 
    memberships.find_by_group_id(group) 
    end 

    def join!(group) 
    memberships.create!(:group_id => group.id) 
    end 

    def leave!(group) 
    memberships.find_by_group_id(group).destroy 
    end 
. 
. 
. 
end 

class Group < ActiveRecord::Base 
has_many :memberships 
has_many :members, :through => :memberships, :source => :user 
has_attached_file :photo, :styles => { :thumb => "100x100", 
             :small => "200x200" } 
attr_accessible :name, :description, :private, :created_at, :group_id 
attr_accessible :photo, :photo_file_name, :photo_content_type, 
       :photo_file_size, :photo_updated_at         
end 

class Membership < ActiveRecord::Base 
attr_accessible :group_id 

belongs_to :user 
belongs_to :group 
end 

這裏是會員控制器:

class MembershipsController < ApplicationController 
def create 
    @group = Group.find(params[:membership][:group_id]) 
    current_user.join!(@group) 
    respond_to do |format| 
    format.html { redirect_to @group } 
    format.js 
    end 
end 

def destroy 
    @group = Membership.find(params[:id]).group 
    current_user.leave!(@group) 
    respond_to do |format| 
    format.html { redirect_to @group } 
    format.js 
    end 
end 

def index 
    @memberships = Membership.all 
end 

end 

回答

0

我想你在找什麼是:has_and_belongs_to_many( NN)關聯而不是:has_many(1-N)關聯。

看來,每個組也可以有很多用戶。

http://guides.rubyonrails.org/association_basics.html#has_and_belongs_to_many-association-reference

看看官方軌使用指南:has_and_belongs_to_many關係,這將是很容易的集合(用戶)添加到其他集合(會員)。

例如

@membership.users << current_user 

將增加CURRENT_USER到會員

@membership.users.delete(current_user) 

將從成員中刪除CURRENT_USER。

+0

這似乎更容易。但是,我試圖使用has_many:through關聯,因爲我想向連接表中添加更多的字段。我的印象是,HABTM關聯只創建了一個只有兩個字段的連接表 - 您正在加入的兩件事的ID。我對整個事情非常困惑,因爲我希望用戶能夠創建和加入一個組,但是組不能顯然加入用戶。所以它變得非常模糊 – Brian

+0

這就是答案:http://stackoverflow.com/questions/5403819/has-many-through-association說我應該建立不同的關聯,但似乎仍然會實施'成員?','加入!'和'離開!'方法 – Brian