2
我試圖實現一個搜索欄,當我測試時,它以奇怪的方式工作:只能找到最後一個字母或整個名稱。 如果問題很容易解決,我很抱歉,我是Ruby On Rails的新手,我真的需要這個修復,我無法找到如何解決它自己。 (對不起我的英文不好)搜索欄的問題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>
這裏是我的控制器:
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
如果你使用佔位符,那麼他不會得到SQL注入攻擊。 – max
我剛剛試過這個,並得到這個錯誤信息: ActiveRecord :: StatementInvalid在索引#搜索 SQLite3 :: SQLException:接近「ILIKE」:語法錯誤:SELECT「ads」。* FROM「ads」WHERE(title ILIKE' %a%') – Zebiro
@Zebiro只使用'LIKE'我以爲你在使用psql。 SQLite沒有ILIKE功能。 – Arsen