ruby-on-rails - Ransack,Postgres - 对具有不同 : true 的关联表中的列进行排序

标签 ruby-on-rails ruby ruby-on-rails-4 rails-postgresql ransack

我有一个使用 Ransack gem 的应用程序,我正在将它从 Mysql 转换为 Postgres。

在排序列来自关联表且 distinct 选项设置为 true 的实例中,Postgres 抛出此错误:

PG::InvalidColumnReference: ERROR:  for SELECT DISTINCT, ORDER BY expressions must appear in select list

Ransack github 页面上说,在这种情况下,“你只能靠自己了。”

什么是最好的 - 任何! - 处理这种情况的策略?

q = Contact.includes(:contact_type).search
q.sorts = ['contact_type_name asc']
q.result(distinct: true)
PG::InvalidColumnReference: ERROR:  for SELECT DISTINCT, ORDER BY expressions must appear in select list

谢谢!

最佳答案

有一种更简单的方法可以解决这个问题。使用 ActiveRecord 连接查询或选择查询来添加所需的列,例如:

q = Contact.search
q.sorts = ['contact_type_name asc']
q.result(distinct: true).
  includes(:contact_type).
  joins(:contact_type)

或者,如果您只想选择几列,您可以这样做:

q = Contact.search
q.sorts = ['contact_type_name asc']
q.result(distinct: true).
  select('contacts.*, contact_type.name')

我做了一个pull request更新 Ransack 的自述文件。

关于ruby-on-rails - Ransack,Postgres - 对具有不同 : true 的关联表中的列进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19748959/

相关文章:

ruby-on-rails - Rails 3、Action Mailer、附件、form_for、电子邮件

ruby-on-rails - rails : render a template into a variable

ruby - ERROR URI::InvalidURIError: Bad URI(is not URI?) 因为浏览器

ruby-on-rails - Rspec 如何 stub 在方法中创建的对象

ruby-on-rails - 是否可以使用我们尚未安装的 rails 版本创建新的 rails 应用程序?

python - SPA (Ember) 身份验证与后端

ruby-on-rails - 与 Ruby on Rails 中的范围关联

ruby-on-rails - 从数组中提取名称并在每个名称后添加换行符

ruby-on-rails - 路径约束中的 Rails Active Record/数据库数据

ruby-on-rails - 通过关系创建 has_many 的问题 (Rails 4)