编写关联范围 - Rails 4.



有人可以告诉我如何将以下方法变成一个范围。

  • 我希望能够显示用户付费参加的所有活动
  • 目前,如果用户已付费参加活动,我可以签入活动的视图@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.

最新更新