我想检查用户是否是活动的成员。但是得到了这个错误。
class Event < ApplicationRecord
has_many :memberships
has_many :users, through: :memberships
def has_membership?(user)
joins(:memberships).where(memberships: { user_id: user.id })
end
end
class User < ApplicationRecord
has_many :memberships
has_many :events, through: :memberships
end
EventsController
def show
@event = Event.find_by_id(params[:id])
if @event.has_membership?(current_user)
render json: @event, status: 200
else
render json: {
error: "Permission denied"
}, status: 422
end
end
返回:
undefined method `joins' for <Event:0x000000059a3148>
但是如果我尝试使用irb:Event.joins(:memberships).where(memberships: { user_id: user.id })
它会显示正确的数据。
答案 0 :(得分:0)
它不起作用的原因是因为has_membership?
正在处理Event
的单个实例,但joins
是Event
的类方法。
你可以通过
来解决这个问题def has_membership?(user)
Event.joins(:memberships)
.where(id: self.id)
.where(memberships: { user_id: user.id })
end
但在这种情况下,更好的方法是避免全部加入并直接查询Membership
Membership.where(user_id: user.id, event_id: self.id)