gpt4 book ai didi

mysql - 使用多对多 rails 连接查询

转载 作者:行者123 更新时间:2023-11-29 19:29:58 24 4
gpt4 key购买 nike

我想检查用户是否是事件的成员。但出现此错误。

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

事件 Controller

    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 }) 它会显示正确的数据。

最佳答案

它不起作用的原因是因为 has_membership? 正在处理 Event 的单个实例,但 joins事件

你可以通过这样做来解决这个问题

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)

关于mysql - 使用多对多 rails 连接查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41857346/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com