【发布时间】:2013-10-07 20:33:04
【问题描述】:
在我的控制器中,当我尝试在其上堆叠 will_paginate 时,我的 filter_with_params() 方法在 postgres 中导致语法错误。
在我的控制器中我调用:
@styles = Style.filter_with_params(params).paginate(:page => params[:page], :per_page => 6)
模型方法:
class Style < ActiveRecord::Base
def self.filter_with_params(params)
scoped = where("styles.item != ''")
if params[:t]
scoped = scoped.joins(:tags)
scoped = scoped.select("distinct styles.*, count(*) AS count")
scoped = scoped.where(tags: { name: params[:t] })
scoped = scoped.group('styles.id')
scoped = scoped.having("count(*) = #{params[:t].size}")
end
scoped
end
基本上我的过滤方法是寻找标签,然后我需要在这些结果之上进行分页。有类似经历的人吗?
我在这个应用上使用 Rails 3
这是 postgres 错误
PG::Error: ERROR: syntax error at or near "distinct" LINE 1: SELECT COUNT(*) AS count_all, distinct styles.*, count(*) AS...
^
: SELECT COUNT(*) AS count_all, distinct styles.*, count(*) AS count, styles.id AS styles_id FROM "styles" INNER JOIN "tagizations" ON "tagizations"."style_id" = "styles"."id" INNER JOIN "tags" ON "tags"."id" = "tagizations"."tag_id" WHERE "tags"."name" IN ('engagement') AND (styles.polenza_item != '') GROUP BY styles.id HAVING count(*) = 1
【问题讨论】:
-
Style.filter_with_params方法内的查询中有 SQL 错误。 -
为什么在每一行中让 scoped 等于不同的范围?您不想连接到作用域变量还是我在这里遗漏了什么?
-
@MarekLipka filter_with_params 方法在我附加分页方法之前不会出错
标签: ruby-on-rails ruby postgresql will-paginate