ruby on rails - My has_many :through association of Users, Groups, and Memberships is causing trouble in some methods -
i working has_many :through association: users join groups through membership. having trouble methods created in user model determine if user member of group, , allow user join , leave group. using console, memberships.find_by_group_id
returns nil. not sure why , think might way have set has_many :through associations, though after looking on many, many times , consulting railscasts/blogs seems ok. if want me post more info, schema.db or something, let me know
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
here membership controller:
class membershipscontroller < applicationcontroller def create @group = group.find(params[:membership][:group_id]) current_user.join!(@group) respond_to |format| format.html { redirect_to @group } format.js end end def destroy @group = membership.find(params[:id]).group current_user.leave!(@group) respond_to |format| format.html { redirect_to @group } format.js end end def index @memberships = membership.all end end
i think looking :has_and_belongs_to_many
(n-n) association rather :has_many
(1-n) association.
it seems each group can have many users well.
take @ official rails guides @ http://guides.rubyonrails.org/association_basics.html#has_and_belongs_to_many-association-reference
using :has_and_belongs_to_many relationships, easy add collection(user) other collection(membership) .
for example
@membership.users << current_user
will add current_user membership
and
@membership.users.delete(current_user)
will delete current_user membership.
Comments
Post a Comment