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”))