在Ransack wiki中给出的5个示例中,如果数据库中有两个列为first_name
和last_name
,那么实际上没有一个完整的全名搜索,只有一个输入字段。
在user.rb
中,我有:
ransacker :full_name do |parent|
Arel::Nodes::InfixOperation.new('||',
Arel::Nodes::InfixOperation.new('||',
parent.table[:first_name], Arel::Nodes.build_quoted(' ')
),
parent.table[:last_name]
)
end
搜寻表格如下:
= f.search_field :full_name_cont
数据库中有一个具有first_name: Benjamin
和last_name: Zobrist
的用户。
示例1(工作):--如果您搜索Benjamin Z
,代码段将按预期提取记录
示例2(不起作用):,如果您搜索Ben Zobrist
,它不会提取记录。
我怎样才能让例2工作?
发布于 2017-01-05 12:56:55
似乎你在寻找多列上模糊匹配的全文搜索。我不确定有什么简单的办法可以绕过这件事。
您可以有另一个(计算过的)列,它的值为全名,它可以用于搜索,就像您描述的那样,甚至可以使用数据库的全文功能。您还可以使用SQL视图并对其执行搜索。如果即使这样也不能产生结果,那么你可能不得不使用一个成熟的搜索解决方案,比如Elasticsearch,Solr,……
https://stackoverflow.com/questions/40409447
复制相似问题