ARTLoe
ARTLoe

Reputation: 1799

Writing a scope for associations - Rails 4

Could one kindly advise me how i can turn the below method into a scope.

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

Answers (2)

mikdiet
mikdiet

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

RamPrasad Reddy
RamPrasad Reddy

Reputation: 125

Payment.rb

  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

Related Questions