Reputation: 1799
Could one kindly advise me how i can turn the below method into a scope.
@event.current_user_attending_paid?(@user)
i am finding this challenging. would it be something like this: scope :booked_events, -> { joins(:payments).where(payment.user_id: user) }
in the event.rb file?
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
payment.rb
class Payment < ActiveRecord::Base
belongs_to :user
belongs_to :event
end
user.rb
has_many :payments
Upvotes: 0
Views: 34
Reputation: 10018
You almost solve this challenge in your attempt. In event.rb
scope :booked_events, -> (user) { joins(payments: :user).where(users: { id: user.id }) }
Upvotes: 1
Reputation: 125
scope :paid?, -> (user, event) { where(user_id: user.id, event_id: event.id) }
This returns an active record collect ActiveRecord::Relation object
Now in views, you can use like Payment.paid?(User.first, Event.first).exists?
exists? returns false if result is empty.
Upvotes: 1