这个问题的答案应该很简单,但我还没有通过活动记录查询指南、SO 上的其他问题或在 Rails 控制台中乱来找到答案。
我只是想通过活动记录查询接口来查询数据库,并返回第一个或最后一个条目的单个列的值,而不必遍历整个表(稍后会解释)。
有一种方法可以使用 pluck 执行此操作,但是查询消息的结构如下:
initial = Message.where("id = ?", some_id).pluck(:value).first
final = Message.where("id = ?", some_id).pluck(:value).last
不幸的是,这是一个非常低效的操作,因为它会value
从每条与提供的匹配项匹配的记录中提取属性id
,然后只返回第一个或最后一个条目。我想基本上将这些陈述重新排序为:
initial = Message.where("id = ?", some_id).first.pluck(:value)
final = Message.where("id = ?", some_id).last.pluck(:value)
但是,我得到一个 NoMethodError 解释没有pluck
Message 的方法。我尝试过多种方式来做到这一点:
initial = Message.where("id = ?", some_id).first(:value)
initial = Message.where("id = ?", some_id).first.select(:value)
...
但都返回某种错误。我知道返回
哎呀
,我的问题的一部分被切断了(包括我最后得到的答案) - 我会看看我是否能找到它,但我使用该select()
方法进行了探索,在该方法中我发现 select 只接受一个参数,意思是一个查询必须构建字符串,因为它不能接受像这样的可选参数id = ?, some_id
,但后来我发现只需附加一个.value
(value
您要获取的列属性在哪里)就可以了,所以我切换回where
如下答案所示的方法。