带有关联的 Rails 范围
Posted
技术标签:
【中文标题】带有关联的 Rails 范围【英文标题】:Rails scope with associations 【发布时间】:2021-11-17 17:34:55 【问题描述】:所以目前我有这个范围:
scope :ending_documents, -> where('document1_valid_to <= ? OR document2_valid_to <= ? OR document3_valid_to <= ? OR document_4_valid_to <= ? ', Time.zone.now.end_of_day + 30.days, Time.zone.now.end_of_day + 30.days, Time.zone.now.end_of_day + 30.days, Time.zone.now.end_of_day + 30.days )
我正在使用此范围查找至少有 1 个文档在 30 天内结束或已结束的用户。但是我需要通过关联找到另一个文档。
class User
has_many :user_cards
class UsersCard
belongs_to :user
belongs_to :card
class Card
belongs_to :user
has_many :user_cards
These are the example tables.
如何在同一范围内添加分配给用户的结束卡?我对加入感到满意,但是当协会像这样经历时,我该怎么办?提前致谢!
【问题讨论】:
【参考方案1】:我建议你使用has_many :through
关联
class User
has_many :user_cards, dependent: :destroy
has_many :cards, through: :user_cards
scope :ending_documents, -> joins(user_cards: :cards).where('users.document1_valid_to <= ? OR users.document2_valid_to <= ? OR users.document3_valid_to <= ? OR users.document_4_valid_to <= ? OR cards.valid_to <= ?', Time.zone.now.end_of_day + 30.days, Time.zone.now.end_of_day + 30.days, Time.zone.now.end_of_day + 30.days, Time.zone.now.end_of_day + 30.days, Time.zone.now.end_of_day + 30.days)
end
【讨论】:
以上是关于带有关联的 Rails 范围的主要内容,如果未能解决你的问题,请参考以下文章
Rails - has_one 关系:关联和非关联对象的范围
如何在整个 Rails 活动记录关联链中取消特定模型的默认范围?