有人可以告诉我如何将以下方法变成一个范围。
- 我希望能够显示用户付费参加的所有活动
- 目前,如果用户已付费参加活动,我可以签入活动的视图
@event.current_user_attending_paid?(@user)
- 目的是寻找具有属于特定用户的付款的事件
我发现这很有挑战性。会是这样的: scope :booked_events, -> { joins(:payments).where(payment.user_id: user) }
在 event.rb 文件中?
event.rb
has_many :payments
#checks if current user has paid to attend event
def current_user_attending_paid?(user)
self.payments.exists?(user: user)
end
付款.rb
class Payment < ActiveRecord::Base
belongs_to :user
belongs_to :event
end
用户.rb
has_many :payments
你在尝试中几乎解决了这个挑战。在event.rb
scope :booked_events, -> (user) { joins(payments: :user).where(users: { id: user.id }) }
Payment.rb
scope :paid?, -> (user, event) { where(user_id: user.id, event_id: event.id) }
这将返回一个活动记录集合活动记录::关系对象
现在在视图中,您可以像Payment.paid?(User.first, Event.first).exists?
一样使用
exists? returns false if result is empty.