【问题标题】:Sort alphabetically hash's values in array from STRIPE API / Rails从 STRIPE API / Rails 按字母顺序对数组中的哈希值进行排序
【发布时间】:2022-01-04 16:49:24
【问题描述】:

在 rails 6.1.4 中,我想以 DESC 顺序在 STRIPE 中显示产品的 :nickname。我的意思是我的 VIEW 页面上的 S、M、L,而不是像 Stripe 给我们的随机方式。 在他们的https://stripe.com/docs/api 中,我们似乎无法以简单的方式提出请求。

为此,我查询@compositionsProduct = Stripe::Price.list(product: @composition.product)。它在data 部分返回一个哈希数组:

    => #<Stripe::ListObject:0x3ff733e41c08> JSON: {
  "object": "list",
  "data": [
    {"id":"price_price1","object":"price","active":true,"billing_scheme":"per_unit","created":1635150421,"currency":"eur","livemode":false,"lookup_key":null,"metadata":{},"nickname":"L","product":"prod_prod1","recurring":null,"tax_behavior":"unspecified","tiers_mode":null,"transform_quantity":null,"type":"one_time","unit_amount":4500,"unit_amount_decimal":"4500"},
    {"id":"price_price2","object":"price","active":true,"billing_scheme":"per_unit","created":1635150421,"currency":"eur","livemode":false,"lookup_key":null,"metadata":{},"nickname":"S","product":"prod_prod1","recurring":null,"tax_behavior":"unspecified","tiers_mode":null,"transform_quantity":null,"type":"one_time","unit_amount":2500,"unit_amount_decimal":"2500"},
    {"id":"price_price3","object":"price","active":true,"billing_scheme":"per_unit","created":1635150421,"currency":"eur","livemode":false,"lookup_key":null,"metadata":{},"nickname":"M","product":"prod_prod1","recurring":null,"tax_behavior":"unspecified","tiers_mode":null,"transform_quantity":null,"type":"one_time","unit_amount":3500,"unit_amount_decimal":"3500"}
  ],
  "has_more": false,
  "url": "/v1/prices"
}

我想写这样的东西: Stripe::Price.list(product: @composition.product).sort_by([:nickname].reverse) 但它显然不起作用。

我可以遍历这 3 行,但我需要分别在他们的价格页面上 linked_to 他们。

<% @compositionsProduct.map do |compoPrice| %>
  <%= link_to "#{compoPrice.nickname}", composition_path(compoPrice.id) %>
<% end %>

这是我最远的一点:@compositionsProduct.sort_by { |hash| hash[:nickname]} 负号不起作用,.reverse 也不起作用

sort_by 按字母顺序排列哈希数组中特定行的值的最佳方法是什么?

【问题讨论】:

  • 列表请求总是按照对象创建的时间顺序响应,最近的在前。这不是随机的,只是不是你需要的。
  • 嗯,我按时间顺序为产品创建价格 S,然后是 M,然后是 L。但有时我得到 S、M、L,有时是 L、M、S 等。我检查了 created_at和 Price_id 但它只是抛出随机数。我必须手动完成这个简单的需求
  • 您按照 S、M、L 的顺序创建了它们,那么列表请求应始终返回 L、M、S。应首先列出最近创建的。

标签: ruby-on-rails api sorting


【解决方案1】:

@compositionsProduct.sort_by { |hash| hash[:nickname] }.reverse 效果很好。

【讨论】:

    猜你喜欢
    • 2013-06-06
    • 1970-01-01
    • 2015-06-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-03
    • 2020-04-05
    相关资源
    最近更新 更多