Ruby on rails 宝石搜索不';使用全名搜索时,不会返回任何结果
我正在使用Ransack和Rails 3 我的看法:Ruby on rails 宝石搜索不';使用全名搜索时,不会返回任何结果,ruby-on-rails,ruby,ransack,Ruby On Rails,Ruby,Ransack,我正在使用Ransack和Rails 3 我的看法: <%= search_form_for @search do |f| %> <%= f.text_field :first_name_or_last_name_or_company_cont, :style => 'width:150px;padding-top:6px;' %><p class="button"> <%= f.submit "Search by name o
<%= search_form_for @search do |f| %>
<%= f.text_field :first_name_or_last_name_or_company_cont, :style => 'width:150px;padding-top:6px;' %><p class="button">
<%= f.submit "Search by name or company" %></p>
<% end %>
关于用户模型,我有:
def full_name
"#{self.first_name} #{self.last_name}"
end
在控制台上工作
如果我的用户具有first\u name=“Foo”
,last\u name=“Bar”
,当我使用其中一个进行搜索时,我会得到预期的结果
当我使用full\u name=“Foo Bar”
搜索时,没有得到任何结果
我尝试将我的文本字段更改为:
<%= f.text_field :first_name_or_last_name_or_company_or_full_name_cont
我想我可以在这里拆分键值,只搜索名字 您必须使用
洗劫器。将此添加到您的用户
型号中:
ransacker :full_name do |parent|
Arel::Nodes::InfixOperation.new('||',
parent.table[:first_name], parent.table[:last_name])
end
您可以查看更多示例 将以下代码添加到您的模型中:
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.label :full_name %><br>
<%= f.search_field :full_name_cont %>
洗劫者的部分是从飞机上取下来的
使用PostgreSQL在Rails 4.2上进行测试。感谢您为我指明了正确的方向。您的示例不适用于mysql。我跟随你的链接,尝试了一个成功的例子。也就是说:ransacker:full_name do | parent | Arel::Nodes::NamedFunction.new('concat_ws',['',parent.table[:first_name],parent.table[:last_name]])end您在使用mysql吗?“因为我也试过同样的方法,但没有成功。”JacobFrye检查你上面curts评论中的代码。也许它会对你有用。但是,我已经用Rails 4.2和PostgresSQL对其进行了测试,如果搜索以空格分隔的名字和姓氏,就会出现问题。例如:first\u name
是“John”,last\u name
是“Doe”。如果我们只搜索“John”或“Doe”,它会起作用。然而,如果我们搜索“约翰·多伊”,它将什么也找不到。我们需要在Ransacker中添加空格字符。我将创建并回答说明。请不要发布多个问题。发布一个好的答案,然后投票/标记以重复结束其他问题。如果这个问题不是重复的,那就根据你的问题量身定做你的答案。@Kyl:很抱歉。我已经照你的建议做了。
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.label :full_name %><br>
<%= f.search_field :full_name_cont %>