【问题标题】:search form not working and gives error in rails app搜索表单不起作用并在 Rails 应用程序中出现错误
【发布时间】:2016-06-24 01:48:00
【问题描述】:

我正在尝试为我正在构建的 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'

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

【问题讨论】:

  • 您能否为products 表提供您的schema.rb 的一部分?似乎short_description 列不存在。
  • 嗨,那是真的 :) 我从代码中删除了它,它现在看起来像这样并且运行良好@products = Product.where("name LIKE ? or description LIKE ?", @q, @q)

标签: ruby-on-rails ruby postgresql search


【解决方案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

【讨论】:

  • 我只删除了它,我不需要这个列.... 现在该行看起来像这样 ` @products = Product.where("name LIKE ? or description LIKE ?", @q, @q)` 就像一个魅力。从早些时候开始,线路中有一些剩菜,我的坏
最近更新 更多