2017-09-28 18 views
0

私は、ページ作成を実装するためにKaminari Gemを使用する既存のコードの上に検索機能を実装しようとしています。しかし、それはすべて重要ではないかもしれません。私が理解できないことは(私がレール/ルビーをかなり新しくしているので)メソッド連鎖です。次のコードは、このエラーがスローされます。railsメソッド連鎖コントローラ

SQLite3::SQLException: no such column: name: SELECT COUNT(*) FROM "courses" WHERE (name LIKE '%1%')

# GET /courses 
# GET /courses.json 
def index 
    # @courses = Course.order(:title).page params[:page] 
    if logged_in?(:site_admin) 
    # @courses = Course.page(params[:page]).per(5) 
    @courses = Course.search(params[:term]).page(params[:page]).per(5) 
    else 
    # @courses = Course.offered.page(params[:page]).per(5) 
    @courses = Course.offered.search(params[:term]).page(params[:page]).per(5) 
    end 
end 

モデルでsearch(params[:term])

検索方法の添加せずに作業をコメントアウトされている2つのライン:また

def self.search(term) 
if term 
    where('name LIKE ?', "%#{term}%").order('id DESC') 
else 
    order('id DESC') 
end 

、Iチュートリアルの次の記事:https://rubyplus.com/articles/3381-Simple-Search-Form-in-Rails-5

+0

あなたは 'includes'をどこかで使っていますか?はいの場合は、そうしないでください。 [こちら](https://github.com/kaminari/kaminari/issues/869#issuecomment-283411641)を確認してください。 –

答えて

0

ルックスあなたのようにnameCourseの中にありません。それとも、あなたが移行を実行するのを忘れていましたか? t.string "name"

create_table "courses" do |t| 
    t.integer "courses_id" 
    t.string "name" 
    t.datetime "created_at" 
    t.datetime "updated_at" 
    end 

テイクノート:あなたのデータベース上でそれを持っている場合は、知っているあなたのスキーマdb/schema.rbを見て、あなたがこのような何かを見つける必要がありますするには

。それがない場合は、マイグレーションを生成して作成する必要があります。

rails g migration add_name_to_courses name:stringとする必要があります。

0

ransack gemを使用することをお勧めします。これはシンプルで最適化され、検索の最適化が向上します。それに応じてそれを変更することができます。

関連する問題