兩個特定的記錄查找記錄我有一個Product
模型has_and_belongs_to_many :taxons
,我想找到那些特定分類羣的所有產品。例如,如果產品屬於「Ruby on Rails」和「襯衫」分類羣,則我希望該產品能夠返回到數據集中,但如果它僅屬於「Ruby on Rails」中的而不是 「或‘襯衫’與另一個表
Q
與另一個表
6
A
回答
13
我有這個問題而回,幸運的是有一個很好的解決方案。
def self.has_taxons(taxons)
id = arel_table[:id]
Product.joins(:taxons).where(taxons: { name: taxons }).group(id).having(id.count.eq(taxons.size))
end
0
假設的表現是不是一個要求:
a = Taxon.find_by_name!('Ruby on Rails').products.pluck(:id)
b = Taxon.find_by_name!('Shirts').products.where(:id => a)
1
從@samuel這個答案正是我一直在尋找,但我希望能夠仍然提供關鍵字搜索,同時通過Taxon1和Taxon2和TaxonN過濾。我從不需要進行Taxon1或Taxon2搜索,因此我進行了以下自定義設置。做這件事可能不太方便,但對我來說很好。
我添加了新的產品範圍中/app/models/spree/product_decorator.rb
Spree::Product.class_eval do
add_search_scope :in_all_taxons do |*taxons|
taxons = get_taxons(taxons)
id = arel_table[:id]
joins(:taxons).where(spree_taxons: { id: taxons }).group(id).having(id.count.eq(taxons.size))
end
end
然後通過添加它使用了新的範圍給/app/models/spree/base_decorator.rb
Spree::Core::Search::Base.class_eval do
def get_base_scope
base_scope = Spree::Product.active
base_scope = base_scope.in_all_taxons(taxon) unless taxon.blank?
base_scope = get_products_conditions_for(base_scope, keywords)
base_scope = add_search_scopes(base_scope)
base_scope
end
end
現在我可以使用標準的搜索助手來獲取產品(這意味着我仍然可以提供關鍵字等隨着多個分類羣):
# taxon_ids is an array of taxon ids
@searcher = build_searcher(params.merge(:taxon => taxon_ids))
@products = @searcher.retrieve_products
這對我的作品,感到非常痛苦。不過,我打開更好的選擇。
相關問題
- 1. 與另一個表
- 2. 更新一個表與另一個表
- 3. MYSQL:與另一個表
- 4. 選擇與另一個表
- 5. 更新與另一個表
- 6. 與另一個列表
- 7. UPDATE一個表中與另一個
- 8. 填寫一個表與另一個
- 9. 更新一個表與另一個
- 10. 更新表與另一個表的值
- 11. UPDATE數據表與另一個表
- 12. 更新列表與另一個列表
- 13. Python:列表與另一個列表
- 14. 更新字段與另一個字段另一個表
- 15. 找到只有一個表在外國表與另一個表
- 16. 從一個表與和值加入一行從另一個表
- 17. 匹配一個表的每一行與另一個表
- 18. 只能加入一個表中的列與另一個表
- 19. SQL agregate值在一個表中,並與數從另一個表
- 20. 在MySQL中比較一個表與另一個表
- 21. SQL更新一個與值表從另一個表
- 22. 嘗試更新一個表與另一個表
- 23. 獲取一個表與另一個表 「條件」
- 24. 索引一個2D列表與另一個列表
- 25. 比較列表的第一個元素與另一個列表
- 26. Mysql:擴展一個表結構與另一個表結構
- 27. 從一個表與行從另一個表
- 28. 更改另一個div的情況與另一個div與另一個divs
- 29. 的SharePoint newform與另一個列表
- 30. (excel)sumproduct與另一個表單相乘
一個互聯網給你,先生。 –
@RyanBigg也看看這個寶石:https://github.com/ernie/squeel。它在ARel上增加了一層抽象。它允許您構建更簡潔/可讀的查詢。即使在'taxons.name.in taxons'或'taxons.name >> taxons'不超過嵌套哈希好多了,如果你需要超過2個層次的加盟你就會明白這個鏈接。你可以讓你的'having'東西W/O調用'arel_table',如:'有{數量(ID)== some_size}'。 – jdoe