搜索表单无效并在rails app

时间:2016-06-24 01:48:00

标签: ruby-on-rails ruby postgresql search

我正在尝试将一个搜索字段实施到我正在构建的rails应用程序来学习rails。

当我进行搜索时,rails会抛出此错误。

ActiveRecord::StatementInvalid in ProductsController#search

PG::UndefinedColumn: ERROR: column "short_description" does not exist LINE 1: ...WHERE (name LIKE '%%' or description LIKE '%%' or short_desc... ^ : SELECT "products".* FROM "products" WHERE (name LIKE '%%' or description LIKE '%%' or short_description LIKE '%%')

在我的_navbar.html.erb中,我有这段代码

 <%= form_tag search_products_path, class: 'navbar-form navbar-right' do %>
   <%= search_field_tag class: 'form-control', :id => 'searchbar',  :placeholder =>'Search', :name => "query" %>
   <%= submit_tag "Submit", class: 'btn btn-default', :name => nil %>
 <% end %>

并且在products_controller.rb中我有这段代码

  def search
    @q = "%#{params[:query]}%"
    @products = Product.where("name LIKE ? or description LIKE ? or short_description LIKE ?", @q, @q, @q)
    @categories = Category.joins(:products).where(:products => {:id => @products.map{|x| x.id }}).distinct
  end

在routes.rb中我有这行代码

post 'products/search' => 'products#search', as: 'search_products'

有人可以帮我解决这个问题,我没有足够的经验来解决这个问题。

1 个答案:

答案 0 :(得分:1)

在产品控制器中,您有以下ActiveRecord代码:

Product.where("name LIKE ? or description LIKE ? or short_description LIKE ?", @q, @q, @q)

在该SQL字符串中,您引用short_description,这显然不是products_table上的列。

您可以生成迁移以添加列,如下所示:

rails g migration AddShortDescriptionToProducts short_description:text
rake db:migrate