Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Rails按哈希值属性排序_Ruby On Rails_Ruby - Fatal编程技术网

Ruby on rails Rails按哈希值属性排序

Ruby on rails Rails按哈希值属性排序,ruby-on-rails,ruby,Ruby On Rails,Ruby,我正在尝试按等级对域进行排序,这是度量属性的许多键之一 这是一个对象的示例: Domain.all.first.attributes => { "id" => 1, "name" => "example.com", "status" => "active", "country" => "Generic",

我正在尝试按
等级对
进行排序,这是
度量
属性的许多键之一

这是一个对象的示例:

Domain.all.first.attributes
        => {
                    "id" => 1,
                  "name" => "example.com",
                "status" => "active",
               "country" => "Generic",
             "languages" => [],
                   "ips" => [],
            "created_at" => Sun, 25 Dec 2016 11:03:11 UTC +00:00,
            "updated_at" => Mon, 06 Feb 2017 18:17:01 UTC +00:00,
               "metrics" => {
                "internal_code" => 14803,
                            "language" => "",
                    "rank" => 98.4011625387248
               }
         }
目前,我只是通过在
创建的
订购:

  def index
    @domains = filter(@domains.order(created_at: :asc))
如何按
排名对域进行排序?

请尝试以下方法

@domains = filter(@domains.order("metrics.rank"))
试试下面的方法

@domains = filter(@domains.order("metrics.rank"))

如果是JSON字段,您可以按照以下方式进行排序

@domains.order("metrics ->> 'rank' DESC")

如果是JSON字段,您可以按照以下方式进行排序

@domains.order("metrics ->> 'rank' DESC")

问题是它会对排名进行排序,但会将其作为字符串进行排序,例如0、1、11、52、21、3、40、5

您需要将其强制转换为
float
integer
,然后您可以对其进行排序

Domain.order("(metrics ->> 'rank')::float")
#=> SELECT "domains".* FROM "domains" ORDER BY (metrics ->> 'rank')::float
如果需要,您可以按降序排列

Domain.order("(metrics ->> 'rank')::float DESC")
#=> SELECT "domains".* FROM "domains" ORDER BY (metrics ->> 'rank')::float DESC

问题是它会对排名进行排序,但会将其作为字符串进行排序,例如0、1、11、52、21、3、40、5

您需要将其强制转换为
float
integer
,然后您可以对其进行排序

Domain.order("(metrics ->> 'rank')::float")
#=> SELECT "domains".* FROM "domains" ORDER BY (metrics ->> 'rank')::float
如果需要,您可以按降序排列

Domain.order("(metrics ->> 'rank')::float DESC")
#=> SELECT "domains".* FROM "domains" ORDER BY (metrics ->> 'rank')::float DESC


使用@domains=filter(@domains.order(秩:asc))@ChakreshwarSharma秩不是属性。这是数据库中的一个模型,子域是一个模型。metrics是模型的属性。metrics=序列化为文本?使用@domains=过滤器(@domains.order(rank:asc))@ChakreshwarSharma rank不是属性。这是数据库中的一个模型,子域是一个模型。metrics是模型的一个属性。metrics=序列化为文本?(pry)输出错误:#(pry)输出错误:#工作但它是颠倒的,如何先按最高排名排序?您之前的答案工作,但它按升序排序。您将如何进行值的降序?。这不起作用,因为等级是浮动的。@tom我以为等级是字符串。我很高兴它对你有用。现在我发现它分类不好。。获得排名98 90 10 9,然后68 66:/是可行的,但这是颠倒的,如何先按最高排名排序?您以前的答案是可行的,但它是按升序排序的。您将如何进行值的降序?。这不起作用,因为等级是浮动的。@tom我以为等级是字符串。我很高兴它对你有用。现在我发现它分类不好。。获取等级98 90 10 9,然后获取等级68 66:/这仅选择等级字段。我需要对域进行排序并返回所有信息。两个答案的组合起到了作用:@domains=filter(@domains.order(“((metrics->>“rank”)::float DESC”))这只选择了rank字段。我需要对域进行排序并返回所有信息。两个答案的组合成功了:@domains=filter(@domains.order(“((metrics->>'rank')::float DESC”))