🐙

【Rails】scopeを関連テーブルでも使う方法【メモ】

2022/07/26に公開

目的

  • offet_ticketで定義したscopeをcorporationで使いたい

実装

  • scopeを設定
models/offet_ticket.rb
class OfferTicket < ApplicationRecord
  belongs_to :corporation

  # 有効チケット(有効期限あり&残数あり)
  scope :valid_ticket, -> { where('invalid_day >= ?', Date.current).where("count > 0")}
  scope :sponsor, -> { where(reason: [TYPE_PURCHASE, TYPE_SUBSCRIPTION])} # 協賛チケット
end
  • scope内にそのまま記述したら可能
models/corporation.rb
class Corporation < ApplicationRecord
  # 企業が所持している全てのチケット
  has_many :offer_tickets
  # 企業が所持している有効なチケット
  has_many :valid_offer_tickets, -> { valid_ticket }, class_name: 'OfferTicket'
  # 企業が所持している有効な協賛チケット
  has_many :valid_sponsored_tickets, -> { valid_ticket.sponsor }, class_name: 'OfferTicket'
end

Discussion