Я работаю с has_many: через ассоциацию: пользователи присоединяются к группам через членство. У меня возникли проблемы с некоторыми методами, которые я создал в пользовательской модели, чтобы определить, является ли пользователь членом группы, и разрешить пользователю присоединяться и покидать группу. Используя консоль, memberships.find_by_group_id
всегда возвращает ноль. Я не уверен, почему, и я думаю, что это может быть способ, которым я настроил свой has_many: через ассоциации, хотя, просматривая его много раз и обращаясь к Railscasts / блогам, кажется, все в порядке. Если вы хотите, чтобы я опубликовал дополнительную информацию, например, schema.db или что-то еще, дайте мне знать
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