结合简单搜索,will_paginate和排序

时间:2012-05-03 14:57:10

标签: ruby-on-rails will-paginate

您正在将简单的搜索工具与will_paginate分页相结合,基于各自优秀的RailsCasts教程。

代码(在模型中)如下所示,

def search(search, page)

  # See RailsCasts #37 Simple Search Form & #51 will_paginate

  if search
    @matches = SalesActivity.where('salespeople.name LIKE ? OR products.name LIKE ?',
                                      "%#{search}%", "%#{search}%")

    @matches.paginate :per_page => 30,
                      :page => page,
                      :order => 'created_at DESC' # <--- causes exception
  else
    paginate :include => [:salesperson, :product],
             :order => 'created_at DESC',  # works 
             :per_page => 30,
             :page => page
  end
end

指定的顺序在没有搜索的路径上的分页请求中正常工作。

但是,在使用搜索结果的路径(@matches)上,我收到以下错误,

SQLite3::SQLException: ambiguous column name: created_at: SELECT ...  ORDER BY created_at DESC LIMIT 30 OFFSET 

如果我删除了order参数,它可以正常工作。

我很感激有关如何解决此问题的建议。感谢。

3 个答案:

答案 0 :(得分:0)

这两个轨道演员都很老了我会查看它们的来源,以确保它们之间的轨道2和3之间没有重大变化

另外,请仔细检查您是否在迁移过程中生成了created_at。

答案 1 :(得分:0)

此处的修复是将'all'添加到'where'请求的末尾,以根据Active Record Query协议启动实际查询以加载数据。

@matches = SalesActivity.where('salespeople.name LIKE ? OR products.name LIKE ?',
                                  "%#{search}%", "%#{search}%").all

答案 2 :(得分:0)

@matches.paginate(:per_page => 30,:page => page).order('created_at DESC')