2017-01-05 56 views
0

我有挑战,写一个范围,以显示:写作的多个关联一个范围 - 轨道4

  • 属于具有支付属于一个特定的用户事件的所有卡
  • 我目前能显示,有支付使用范围scope :booked_events, -> (user) { joins(payments: :user).where(users: { id: user.id }) }在event.rb文件属于特定用户的所有事件
  • 某些事件有一个卡和一些不

could one kindly advise me how i display all events with a card that have payments that belong to a specific user

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 

我试过BEL流在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文件,如果我想显示所有事件的付款已由用户进行过吗?

回答

1

您只需在中包含card关联即可。它从查询结果中删除没有关联卡的事件:

scope :booked_events_with_cards, -> (user) { joins(:card, payments: :user).where(users: { id: user.id }) } 
+0

谢谢@MikeDiet!我没有意识到你可以添加两个以上的对象(模型)。你能推荐一个很好的资源来学习编写范围(SQL查询)。 – ARTLoe

+1

当然@ARTLoe首先你需要阅读..导轨指南! xD http://guides.rubyonrails.org/active_record_querying.html – MikDiet

+0

谢谢@MikDiet!这太棒了! - 我只是想知道如何在我的问题中写出'cards_belonging_to_booked_events'的范围,因为我花了一些时间阅读你推荐的资源并理解你的答案 - 谢谢!谢谢! – ARTLoe