【问题标题】:Ruby on Rails get an attribute from model via api queryRuby on Rails 通过 api 查询从模型中获取属性
【发布时间】: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


    【解决方案1】:

    答案在问题中,但如果您尝试这样做:

        initial = Message.where("id = ?", some_id).pluck(:value).first
        final   = Message.where("id = ?", some_id).pluck(:value).last
    

    改成这个(只引用列名,在这个例子中它是value,但也可以是amount或其他东西):

        initial = Message.where("id = ?", some_id).first.value
        final   = Message.where("id = ?", some_id).last.value
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-28
      • 2014-09-17
      • 1970-01-01
      • 2011-10-09
      • 1970-01-01
      相关资源
      最近更新 更多