🐙
【Rails】scopeを関連テーブルでも使う方法【メモ】
目的
- 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