我正在调用一个非常简单的函数,但似乎无法弄清楚发生了什么。(我正在使用 rails 3.0.3 和 'will_paginate' gem 的 master 分支)。我有以下代码:
results = Article.search(params) # returns an array of articles
@search_results = results.paginate :page => params[:page], :per_page=>8, :order => order_clause
无论我使用什么 order_clause(例如 'article_title desc' 和 'article_title asc'),结果总是相同的顺序。所以当我检查使用类似的东西时@search_results[0]
,元素总是相同的。在我看来,它们显然也总是相同的。我完全错过了什么吗?
我敢肯定这很傻,但我整晚都在用头撞墙。任何帮助将非常感激!
编辑添加:搜索子句执行以下操作:
def self.search(params)
full_text_search(params[:query].to_s).
category_search(params[:article_category].blank? ? '' : params[:article_category][:name]).
payout_search(params[:payout_direction], params[:payout_value]).
length_search(params[:length_direction], params[:length_value]).
pending.
distinct.
all
end
其中每个人都是基于搜索逻辑的函数,如下所示:
#scopes
scope :text_search, lambda {|query|
{
:joins => "INNER JOIN users ON users.id IN (articles.writer_id, articles.buyer_id)",
:conditions => ["(articles.article_title LIKE :query) OR
(articles.description LIKE :query) OR
(users.first_name LIKE :query) OR
(users.last_name LIKE :query)", { :query => "%#{query}%" }]
}
}
scope :distinct, :select => "distinct articles.*"
#methods
def self.payout_search(dir, val)
return no_op if val.blank?
send("payment_amount_#{dir.gsub(/\s+/,'').underscore}", val)
end
def self.length_search(dir, val)
return no_op if val.blank?
send("min_words_#{dir.gsub(/\s+/,'').underscore}", val)
end
谢谢。