ruby-on-rails - 如何正确将此 SQL 转换为 ActiveRecord?

标签 ruby-on-rails activerecord

我想选择属于某个产品的项目。它们在 items.condition 上必须不同。这是查询:

SELECT DISTINCT ON (items.condition) items.id, items.condition, items.price, products.name
FROM products
INNER JOIN items ON products.id = items.product_id
WHERE products.id = 1
ORDER BY items.condition, items.price, products.name;

我尝试了此操作,但收到 StatementInvalid 错误。我正在使用 Rails 4。

product = Product.find(1)
product.items.select("DISTINCT ON(items.condition) items.id, products.*, items.*").order('items.condition, items.price, products.name')

错误:

PG::Error: ERROR:  missing FROM-clause entry for table "products"
LINE 1: SELECT DISTINCT ON(items.condition) items.id, products.*, it...
                                                      ^
: SELECT DISTINCT ON(items.condition) items.id, products.*, items.* FROM "items"  WHERE "items"."product_id" = $1  ORDER BY items.condition, items.price, products.name
ActiveRecord::StatementInvalid: PG::Error: ERROR:  missing FROM-clause entry for table "products"
LINE 1: SELECT DISTINCT ON(items.condition) items.id, products.*, it...

最佳答案

试试这个(未测试)

Product.joins(:items).select("DISTINCT(items.condition), items.id, products.*").order('items.condition, items.price, products.name')

关于ruby-on-rails - 如何正确将此 SQL 转换为 ActiveRecord?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17530439/

相关文章:

ruby-on-rails - Rails 3 默认日期时间格式(不含 UTC)

ruby-on-rails - Assets 同步在每次部署时(几乎)将所有 Assets 上传到 S3,即使没有任何变化

mysql - 同步两个数据库上的数据

ruby-on-rails - Rails 事件记录查询一起列出的 2 个属性

ruby-on-rails - before_filter或rescue创建新记录

ruby-on-rails - 如何在yaml中创建关联数组列表

ruby-on-rails - Rails 服务器未启动 -> 找不到 JavaScript 运行时

ruby-on-rails - 如何使用条件依赖安装创建 Rails gem

ruby-on-rails - 跳过相关对象的验证 - rails activerecord

ruby-on-rails - Rails 中的无表模型