在尝试排序Rails查询的结果时获取“未定义的方法”

时间:2017-08-29 16:12:45

标签: ruby-on-rails ruby-on-rails-5

我正在使用Ruby on Rails 5.我在查询从此查询返回的结果时遇到问题:

@crypto_currencies = CryptoIndexCurrency
  .all
  .pluck("crypto_currency_id")
  .order(:name)

name字段是我想要订购的表的有效成员。

cindex=# \d crypto_currencies;
                                            Table "public.crypto_currencies"
          Column          |            Type             |                           Modifiers
--------------------------+-----------------------------+----------------------------------------------------------------
 id                       | integer                     | not null default nextval('crypto_currencies_id_seq'::regclass)
 name                     | character varying           |
 symbol                   | character varying           |
 latest_market_cap_in_usd | bigint                      |
 latest_total_supply      | bigint                      |
 created_at               | timestamp without time zone | not null
 updated_at               | timestamp without time zone | not null

不幸的是,当我运行上述内容时,我收到错误:

undefined method `order' for #<Array:0x007fa3b2b27bd8>

我该如何纠正?

2 个答案:

答案 0 :(得分:1)

没错,pluck会返回一个数组。以下是文档中的说明:

  

Pluck返回一个类型化的属性值数组,以匹配弹拨的列名

whereorder以及其他返回Relation的方法,以便您可以链接它们。最终应该pluck

答案 1 :(得分:1)

说你想为自己做鸡蛋 - 你正试图在纸箱里面乱蛋蛋壳而不是鸡蛋。

nameCryptoCurrency的字段,但.pluck正在返回CryptoCurrency对象的数组 - 该数组没有name字段

您必须通过遍历数组(例如,使用.each... do)或通过索引(@crypto_currencies[0])访问元素来获取特定的CryptoCurrency数组元素。

有关如何通过iterationby element访问数组元素的更多教程信息,请参阅官方文档。