rails方法在控制器中链接

时间:2017-09-28 22:20:53

标签: ruby-on-rails

我正在尝试在一些使用Kaminari Gem来实现分页的现有代码之上实现搜索功能。但这可能并不重要。我无法弄清楚(因为我对rails / ruby​​相当新)是方法链。以下代码抛出此错误:

  

SQLite3 :: SQLException:没有这样的列:name:SELECT COUNT(*)FROM" courses"在哪里(名字喜欢'%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])

模型中的搜索方法:

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

另外,我正在关注教程:https://rubyplus.com/articles/3381-Simple-Search-Form-in-Rails-5

2 个答案:

答案 0 :(得分:0)

您似乎name内没有Course。或者你忘记了你的迁移?

要知道您的数据库中是否包含它,请查看您的架构db/schema.rb,您应该找到类似的内容:

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

注意t.string "name"。如果您没有,那么您应该生成一个迁移来创建它。

rails g migration add_name_to_courses name:string应该这样做。

答案 1 :(得分:0)

我建议您使用ransack gem,这很简单,优化并会增加您的搜索优化。你可以相应地修改它。