2017-10-16 38 views
0

每個用戶有許多SaleItems和許多NeededItems。我想查詢用戶1的SaleItem名字,看看其中是否也有類似的名字,以用戶2的NeededItems(「名」是唯一的屬性)Rails:基於來自另一個陣列的記錄(字符串)查詢數組

@needed_item_of_user2 = NeededItem.where("user_id = ?", 2).first 
# "Pikachu Pokemon card" 
@sale_items_of_user1 = SaleItem.where("user_id = ?", 1) 
# "Baseball cards", "Water Heater", "Pikachu doll", "Squirtle Pokemon card" 
@matching_sale_items = @[email protected]_item_of_user2.name 
# It should output either "Squirtle Pokemon card" (high accuracy) or 
# all except "Water Heater" (low accuracy) 

我應該使用什麼方法來獲得@matching_sale_items?精確的匹配

我已經試過:基於How do I search within an array of hashes by hash values in ruby?

@matching_sale_items = @sale_items_of_user1.select do |sale| 
    sale["name"] == @needed_item_of_user2.name 
end 
@matching_sale_items = @sale_items_of_user1.map do |a| 
    a.name.downcase 
end.grep(/#{@needed_item_of_user2.name.downcase[0,4]}/) 
# outputs strings 

將來,我想使用該方法來查詢SaleItems表與NeedItems表的匹配。

回答

1

你可以試着這樣做:

user1 = User.find 1 
user2 = User.find 2 
needed_items_names = user2.needed_items.pluck(:name) 
matched_items = user1.sale_items.where(name: needed_items_names) 

文檔閱讀:

+0

感謝勇氣。我發現這一個搜索數組非匹配的匹配https://stackoverflow.com/questions/2220423/case-insensitive-search-in-rails-model '@matched_items = user1.sale_items.where(「LOWER(name )ILIKE?「,」%#{@ needed_item_of_user2.name.downcase [0,5]}%「)' –

相關問題