[英]How to filter records in has_many through relationship using a relation's attribute in Rails 5.2?
[英]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.