我使用以下方法实现了用户 - 成员资格 - 组织关系: 我使用rolify来实现组织中用户的角色。
class User < ApplicationRecord
rolify
has_many :memberships, :dependent => :destroy
has_many :organizations, through: :memberships
end
class Membership < ApplicationRecord
belongs_to :user
belongs_to :organization
end
class Organization < ApplicationRecord
resourcify
has_many :memberships, :dependent => :destroy
has_many :users, through: :memberships
end
然后,每当我在OrganizationControllers中调用def unjoin时:
def join
@organization = Organization.find(params[:id])
if @organization.users.exists?(current_user.id)
flash[:notice] = 'Already a Member'
redirect_to @organization
else
@organization.users << current_user
current_user.add_role :member, @organization
if current_user == @organization.users.last
flash[:notice] = 'Successfully Joined In'
redirect_to @organization
else
flash[:notice] = 'Unable to Join'
redirect_to @organization
end
end
end
def unjoin
@organization = Organization.find(params[:id])
if @organization.users.exists?(current_user.id)
current_user.remove_role :member, @organization #Error
@organization.users.delete(current_user)
if @organization.users.exists?(current_user.id)
flash[:notice] = 'Unable to unjoin'
redirect_to @organization
else
flash[:notice] = 'Successfully Unjoined'
redirect_to @organization
end
else
flash[:notice] = 'Not Yet A Member'
redirect_to @organization
end
end
我在OrganizationsController #ninjoin中得到 NoMethodError 未定义的方法`用户&#39;对于#, 在线: current_user.remove_role:member,@organization