我的程序在我的数据库中用名称交叉引用用户输入的成分列表,并返回列表中项目(而不是列表本身)与数据库中名称的精确匹配。
数据库中的成分名称最长可达4个单词,还包括空格、数字、破折号和括号中的单词。用户输入单个项目或项目列表,结果页上只输出数据库中的匹配项。用户搜索只能返回完全匹配的结果,因为其他任何东西都会扭曲结果。
输入的示例列表如下所示:avene thermal spring water(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
这段代码功能正常,但不太方便用户使用,因为它要求用户输入一个列表,其中每个项目用逗号和空格分隔。如果输入中有任何错误(例如逗号和下一个单词之间没有空格),则不会返回匹配项。我想知道是否有另一种方法来实现这一点,即更加用户友好,同时仍然保持准确的匹配。
暂无答案!
目前还没有任何答案,快来回答吧!