2016-06-24 4 views
1

私はレールを学習するために構築しているレールアプリケーションに検索フィールドを実装しようとしています。検索フォームが動作しておらず、レールアプリケーションでエラーが発生する

私が検索すると、レールがこのエラーを返す。私はこのコード

<%= 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 

を持っている私の_navbar.html.erbで

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 '%%')

そして、 routes.rbにはこのコード行があります

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

誰かがこれで私を助けてください、私は自分自身でこれを把握するのに十分な経験はありませんか?どうやらproducts_table上の列ではありませんあなたはshort_descriptionを参照しているというSQL文字列では、

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

:あなたはこのActiveRecordのコードを持っている製品のコントローラで

+0

あなたは 'products'テーブルのためのあなたのschema.rbの一部を提供してもらえ:

あなたはそうのように列を追加するには、マイグレーションを発生させることができますか? 'short_description'カラムは存在しないようです。 – retgoat

+0

こんにちは、それは本当です:)私はコードからそれを削除しました、これは今のように見え、非常にうまく動作します。 '@products = Product.where("名前は好きですか "、@ q、@q)' – DaudiHell

答えて

1

rails g migration AddShortDescriptionToProducts short_description:text 
rake db:migrate 
+1

私はそれを削除するだけで終了しましたが、この列は必要ありませんでした....今この行は '@products = Product.where(" LIKE?or description LIKE? "、@ q、@q)'と魅力のように働く。それは、以前の私の悪いから、ラインのいくつかの残り物だった – DaudiHell

関連する問題