2017-10-16 71 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]}%“)' –

相关问题