我在编写要展示的范围时遇到了挑战:
scope :booked_events, -> (user) { joins(payments: :user).where(users: { id: user.id }) }
显示所有属于特定用户的付款事件有人可以告诉我如何使用卡片显示所有活动 拥有属于特定用户的付款
event.rb
has_many :payments
has_one :card
scope :booked_events_with_cards, -> (user) { joins(payments: :user).where(users: { id: user.id }) }
card.rb
belongs_to :event
payment.rb
belongs_to :event
belongs_to :user
user.rb
has_many :payments
我在card.rb文件中尝试了以下内容,但我不确定
belongs_to :event
has_many :payments, through: :event
scope :cards_belonging_to_booked_events, -> (user) { joins(payments: :event).where(users: { id: user.id }) }
但得到以下错误:
2.3.0 :012 > cards.cards_belonging_to_booked_events(user)
Card Load (0.6ms) SELECT "cards".* FROM "cards" INNER JOIN "events" ON "events"."id" = "cards"."event_id" INNER JOIN "payments" ON "payments"."event_id" = "events"."id" INNER JOIN "events" "events_payments" ON "events_payments"."id" = "payments"."event_id" WHERE "users"."id" = 4
SQLite3::SQLException: no such column: users.id: SELECT "cards".* FROM "cards" INNER JOIN "events" ON "events"."id" = "cards"."event_id" INNER JOIN "payments" ON "payments"."event_id" = "events"."id" INNER JOIN "events" "events_payments" ON "events_payments"."id" = "payments"."event_id" WHERE "users"."id" = 4
ActiveRecord::StatementInvalid: SQLite3::SQLException: no such column: users.id: SELECT "cards".* FROM "cards" INNER JOIN "events" ON "events"."id" = "cards"."event_id" INNER JOIN "payments" ON "payments"."event_id" = "events"."id" INNER JOIN "events" "events_payments" ON "events_payments"."id" = "payments"."event_id" WHERE "users"."id" = 4
或者,我是否要在event.rb文件中写入范围,如果我想显示所有具有用户付款事件的卡片?
答案 0 :(得分:1)
您只需要在card
中加入joins
关联。它会从查询结果中删除没有卡关联的事件:
scope :booked_events_with_cards, -> (user) { joins(:card, payments: :user).where(users: { id: user.id }) }