为协会编写范围 - Rails 4

时间:2017-01-04 15:01:52

标签: ruby-on-rails

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

  • 我希望能够显示用户已参加的所有活动
  • 目前,如果用户已付费参加活动,我可以查看活动视图@event.current_user_attending_paid?(@user)
  • 目的是查找具有属于特定用户的付款的事件

我发现这很有挑战性。会是这样的:event.rb文件中的scope :booked_events, -> { joins(:payments).where(payment.user_id: user) }吗?

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

2 个答案:

答案 0 :(得分:1)

Payment.rb

  scope :paid?, -> (user, event) { where(user_id: user.id, event_id: event.id) }

这将返回一个活动记录收集ActiveRecord :: Relation对象

现在在视图中,您可以使用类似Payment.paid?(User.first, Event.first).exists?

的内容
exists? returns false if result is empty.

答案 1 :(得分:1)

你几乎可以在尝试中解决这个挑战。在event.rb

scope :booked_events, -> (user) { joins(payments: :user).where(users: { id: user.id }) }