Rails:基于来自另一个阵列的记录(字符串)查询数组
问题描述:
每个用户有许多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表的匹配。
答
你可以试着这样做:
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)
文档阅读:
感谢勇气。我发现这一个搜索数组非匹配的匹配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]}%“)' –