【发布时间】:2013-02-14 18:12:11
【问题描述】:
这个问题的答案应该很简单,但我还没有通过active record querying guide、SO 上的其他问题或通过在 Rails 控制台中乱来找到答案。
我只是想通过活动记录查询接口查询数据库,返回第一个或最后一个条目的单个列的值,而不必遍历整个表(稍后会解释)。
pluck 有一种方法可以做到这一点,但是查询消息的结构如下:
initial = Message.where("id = ?", some_id).pluck(:value).first
final = Message.where("id = ?", some_id).pluck(:value).last
不幸的是,这是一个效率极低的操作,因为它会从与提供的id 匹配的每条记录中提取value 属性,然后只返回第一个或最后一个条目。我想基本上将语句重新排序为:
initial = Message.where("id = ?", some_id).first.pluck(:value)
final = Message.where("id = ?", some_id).last.pluck(:value)
但是,我得到一个 NoMethodError 解释没有方法 pluck 用于消息。我尝试过多种方式:
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 方法,如下面的答案所示。
【问题讨论】:
标签: ruby-on-rails ruby-on-rails-3 rails-activerecord