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

标签 ruby-on-rails ruby

我试图实现一个搜索栏,当我测试时,它以一种奇怪的方式工作:只能找到最后的字母,或者整个名字。 如果问题很容易解决,我很抱歉,我是 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/

相关文章:

ruby-on-rails - 可以从命令行强制迁移吗?

mysql - 如何使用 Rails 优化此查询

ruby-on-rails - Active Merchant 和 Authorize.net 在生产中返回失败

ruby-on-rails - Rails 服务器提供 Readline 支持错误

ruby-on-rails - Ruby on Rails 中繁重的算法工作?

ruby-on-rails - rails : exclude anything from version control?

javascript - Uncaught ReferenceError : Stripe is not defined - STRIPE ERROR

ruby - 检测多个字谜

regex - 匹配字符串中的 url 路径和 IP 地址

ruby-on-rails - 为什么 will_paginate 不显示第一页之后的项目? (第 1 页之后为空)