【问题标题】:rails method chaining in the controller控制器中的rails方法链接
【发布时间】:2017-09-28 22:20:52
【问题描述】:

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

SQLite3::SQLException:没有这样的列:名称: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])的情况下工作

模型中的搜索方法:

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

【问题讨论】:

  • 您在某处使用includes 吗?如果是,你不应该。检查this

标签: ruby-on-rails


【解决方案1】:

看起来您在Course 中没有name。是这样还是您忘记运行迁移了?

要知道您的数据库中是否有它,请查看您的架构 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 应该这样做。

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2014-03-25
      • 1970-01-01
      • 2014-04-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-18
      • 1970-01-01
      • 2023-03-21
      相关资源
      最近更新 更多