gpt4 book ai didi

ruby-on-rails - 搜索栏 Ruby On Rails 的问题

转载 作者:太空宇宙 更新时间:2023-11-03 16:45:46 25 4
gpt4 key购买 nike

我试图实现一个搜索栏,当我测试时,它以一种奇怪的方式工作:只能找到最后的字母,或者整个名字。 如果问题很容易解决,我很抱歉,我是 Ruby On Rails 的新手,我真的需要修复这个问题,但我自己找不到解决方法。 (抱歉我的英语不好)

这是我的 html:

<div class="search">
<%= form_for root_path, :url => {:action => "search"}, class: 'navbar-form' do |f| %>
<%= text_field_tag 'ad[price_min]', @ads_min, :placeholder => "Price min", class: "form-control embed-responsive-item" %>
<%= text_field_tag 'ad[price_max]', @ads_max, :placeholder => "Price max", class: "form-control embed-responsive-item" %>
<%= text_field_tag 'ad[title]', @ads_text, :placeholder => "Search xablau by name", class: "form-control embed-responsive-item" %>
<button class="btn btn-info" ><i class="glyphicon glyphicon-search"></i></button>
<% end %>
</div>

这是我的 Controller :

def search
if params[:ad].present?
@ads_min = params[:ad][:price_min]
@ads_max = params[:ad][:price_max]
@ads_title = params[:ad][:title]

@ads = Ad.search( params[:ad] )
else
@ads = Ad.all
end
render :action => 'index'
end

这是我的模型:

def self.search(query)
price_min = query[:price_min].present? ? "price >= #{query[:price_min].to_f}" : nil
price_max = query[:price_max].present? ? "price <= #{query[:price_max].to_f}" : nil
title = query[:title].present? ? "title LIKE '%#{query[:title]}'" : nil

query = [title, price_min, price_max].compact.join(" AND ")

return Ad.where( query )
end

最佳答案

您必须使用ILIKE%text%而不是 %text

title = query[:title].present? ? "title ILIKE '%#{query[:title]}%'" : nil

因为 %text%匹配任何包含 text 的字符串但是%text仅与具有 text 的字符串匹配在字符串的末尾。

PS:你必须重写 search方法,因为将基于用户的文本放在 sql 中是不安全的。不要那样做"title LIKE '%#{query[:title]}'"写类似的东西where("title ILIKE ?", "%#{params[:q]}%")

关于ruby-on-rails - 搜索栏 Ruby On Rails 的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33243608/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com