我的程序将用户输入的成分列表与我的数据库中的名称交叉引用,并将列表中项目的精确匹配(不是列表本身)返回到数据库中的名称。
数据库中的成分长度最多为4个字,也包括空格数字,破折号和括号内的单词。用户输入单个项目或项目列表,并且仅在结果页面上输出来自数据库的匹配。用户搜索只能返回完全匹配,因为其他任何内容都会使结果产生偏差。
示例输入列表如下所示: 雅漾温泉水(Avene Aqua),双乙氧基苯酚甲氧基苯三嗪,二乙基己基氨基三嗪酮,甲基二甲苯甲酰甲烷,苯甲酸,辛二醇,生育酚糖苷,聚山梨醇酯20,赋形剂,亚甲基双苯并三唑基四甲基丁基苯酚[纳米]
示例匹配将返回: 亚甲基双苯并三唑基四甲基丁基苯酚[纳米], 聚山梨醇酯20, 赋形剂
输入的列表被分成一个数组,然后与成分名称数组相交。如果有任何匹配,则会在我的视图中打印出来。方法如下。
class IngredientsController < ApplicationController
def search
@parameters = params[:search].downcase.split(/, /)
@results = @parameters & ingredient_names
end
private
def ingredient_names
@ingredient_names = Ingredient.pluck :name
end
end
此代码功能正常,但它不是非常用户友好,因为它要求用户输入一个列表,每个项目用逗号和空格分隔。如果输入中有任何错误(例如,逗号和下一个单词之间没有空格),则不会返回任何匹配项。我想知道是否还有另一种方法可以实现更友好的用户,同时仍保持完全匹配。