![](/img/trans.png)
[英]How to get unique records from Active Record rails 4 based on a column
[英]How to select unique records based on foreign key column in Rails?
我的Rails 4.1应用程序中具有以下模型结构:
delivery_service.rb
class DeliveryService < ActiveRecord::Base
attr_accessible :name, :description, :courier_name, :active, :country_ids
has_many :prices, class_name: 'DeliveryServicePrice', dependent: :delete_all
end
delivery_service_price.rb
class DeliveryServicePrice < ActiveRecord::Base
attr_accessible :code, :price, :description, :min_weight, :max_weight, :min_length, :max_length,
:min_thickness, :max_thickness, :active, :delivery_service_id
belongs_to :delivery_service
end
如您所见,送货服务有很多送货价格。 我正在尝试从送货服务价格表中检索记录; 在外键的唯一范围 (delivery_service_id)中选择具有最低价格属性的记录 (因此实质上是每个交付服务的最便宜交付服务价格)。
如何使用外键属性作为范围从表中选择唯一记录?
希望我已经对此进行了足够的解释,如果您需要更多信息,请告诉我。
谢谢
更新#1:
我要实现的示例:
delivery_service_prices表:
id:1,价格:2.20,delivery_service_id:1
id:2,价格:10.58,delivery_service_id:1
id:3,价格:4.88,delivery_service_id:2
id:4,价格:1.20,delivery_service_id:2
id:5,价格:14.99,delivery_service_id:3
预期成绩:
id:1,价格:2.20,delivery_service_id:1
id:4,价格:1.20,delivery_service_id:2
id:5,价格:14.99,delivery_service_id:3
由于PostgreSQL严格遵守SQL标准(正确的做法),因此需要一些调整才能获得正确的结果。
以下查询为每个交付服务以最低的交付服务价格返回正确的结果:
DeliveryServicePrice.select('DISTINCT ON (delivery_service_id) *').order('delivery_service_id, price ASC')
我需要将delivery_service_id属性添加到订单条件中,否则PostgreSQL会引发以下列错误:
PG::InvalidColumnReference: ERROR: SELECT DISTINCT ON expressions must match initial ORDER BY expressions
希望这对偶然发现它的人有所帮助!
要获得单个记录的最小值,您可以使用
DeliveryServicePrice.where(delivery_service_id: x).order(:price).limit(1).first
或者如果您有delivery_service
对象可用
delivery_service.prices.order(:price).limit(1).first
如果您想要所有service_delivery_id
的所有最小值,则可以使用group
查询
DeliveryServicePrice.group(:delivery_service_id).minimum(:price)
这将使您几乎想要去的地方
{
1: 2.20,
2: 1.20,
3: 14.99
}
包含包含delivery_service_id和价格的哈希。 (您看不到price_id)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.