簡體   English   中英

如何使用 Rails 5.2 中的關系屬性通過關系過濾 has_many 中的記錄?

[英]How to filter records in has_many through relationship using a relation's attribute in Rails 5.2?

我通過 NN 關系管理基於鏈接值列表的分類。 由於關系必須服從特定的順序,我實現了一個介於 model 之間的 ValuesListsClassifications:

class Classification < ApplicationRecord
  has_many :values_lists_classifications
  has_many :values_lists, through: :values_lists_classifications
end

class ValuesListsClassification < ApplicationRecord
  belongs_to :classification
  belongs_to :values_list
end

class ValuesList < ApplicationRecord
  has_many :values_lists_classifications
  has_many :classifications, through: :values_lists_classifications
end

ValuesListsClassification model 包括一個sort_order屬性來定義鏈接的 values_lists 的過濾或排序。

我可以輕松檢索給定分類的所有 values_lists:

My_lists = @classification.values_lists

但是我怎樣才能優雅地檢索通過連接分配給定 sort_order 的 values_lists?

您可以使用ActiveRecord的擴展來實現此目的。 您可以查看文檔以獲取更多詳細信息( 此處鏈接),但作為您的特定案例的示例,您可以執行以下操作:

class Classification < ApplicationRecord
  has_many :values_lists_classifications
  has_many :values_lists, through: :values_lists_classifications do
    def with_sort_order(sort_order)
      where('values_lists_classifications.sort_order = ?', sort_order)
    end
  end
end

class ValuesListsClassification < ApplicationRecord
  belongs_to :classification
  belongs_to :values_list
end

class ValuesList < ApplicationRecord
  has_many :values_lists_classifications
  has_many :classifications, through: :values_lists_classifications
end

然后你可以像這樣訪問/過濾: @classification.value_lists.with_sort_order(sort_order)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM