Ruby 从活动记录关系中获取特定记录
我在数据库中为表customer提供了以下数据Ruby 从活动记录关系中获取特定记录,ruby,ruby-on-rails-4,Ruby,Ruby On Rails 4,我在数据库中为表customer提供了以下数据 id customer_address code created_at updated_at 1 abc_1 2017-11-21 02:58:04 2017-11-21 02:58:04 2 122 st. CA abc_1 2017-11-24 14:26:02 2017-11-24 14:26:02 3
id customer_address code created_at updated_at
1 abc_1 2017-11-21 02:58:04 2017-11-21 02:58:04
2 122 st. CA abc_1 2017-11-24 14:26:02 2017-11-24 14:26:02
3 224 st. CA abc_1 2017-11-28 14:26:02 2017-11-28 14:26:02
第一条记录id=1的客户地址为空。每个客户的代码都是相同的。对于代码输入参数,我想返回具有最新地址的记录,因此在本例中记录id=3。
我在@address中有以下可用的activerecord关系
#<ActiveRecord: : Relation[
#<Address id: 1,
customer_address: “”,
code: “abc_1”,
created_at: "2017-11-21 02:58:04",
updated_at: "2017-11-21 02:58:04">,
#<Address id: 2,
customer_address: “123 st.CA”,
code: “abc_1”,
created_at: "2017-11-24 14:26:02",
updated_at: "2017-11-24 14:26:02">,
#<Address id: 3,
customer_address: “224 st.CA”,
code: “abc_1”,
created_at: "2017-11-28 14:26:02",
updated_at: "2017-11-28 14:26:02">,
]>
有更好的方法吗
谢谢
这并不一定能保证你所问的是什么,因为你实际上并不存储地址上次更新的时间;您仅存储上次更新记录的时间
例如,这也可能发生在代码更改时。但是,在当前数据模型的情况下,这是您所能做的最好的
此方法比原始方法更好,因为整个查询在单个SQL语句中执行,并且没有其他记录加载到内存中。@address.wherecustomer\u address:nil.orderupdated\u at ASC.last?
@address = @address.select { |h| h[:customer_address] != '' } if @address.any? { |h| h[:customer_address] == '' }
@address = [@address.max_by { |h| h[:created_at] }]
Address
.where(code: "abc_1")
.where.not(customer_address: ['', nil])
.order(:updated_at)
.last