【问题标题】:Rails scope with associations带有关联的 Rails 范围
【发布时间】: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.

如何在同一范围内添加分配给用户的结束卡?我对加入感到满意,但是当协会像这样经历时,我该怎么办?提前致谢!

【问题讨论】:

    标签: mysql ruby-on-rails ruby


    【解决方案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
    

    【讨论】:

      猜你喜欢
      • 2013-06-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-23
      • 2015-06-25
      相关资源
      最近更新 更多