Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/55.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_Arrays_Ruby - Fatal编程技术网

Ruby on rails 有没有一种方法可以根据特定的顺序对Rails中的国家进行排序?

Ruby on rails 有没有一种方法可以根据特定的顺序对Rails中的国家进行排序?,ruby-on-rails,arrays,ruby,Ruby On Rails,Arrays,Ruby,我试图按国家/地区订购Rails中的阵列,但我希望某些国家/地区的性能高于其他国家/地区,例如英国为1,美国为2,德国为3,等等 更复杂的是,我首先需要按年订购。比如说,如果一个记录是1969年在英国创造的,我想先在1969年在德国创造一个记录 我尝试了以下方法,但我认为我甚至都不接近: 我的看法是: <% @versions.sort_by do |version | version.country_order %> <%= render 'version_card',

我试图按国家/地区订购Rails中的阵列,但我希望某些国家/地区的性能高于其他国家/地区,例如英国为1,美国为2,德国为3,等等

更复杂的是,我首先需要按年订购。比如说,如果一个记录是1969年在英国创造的,我想先在1969年在德国创造一个记录

我尝试了以下方法,但我认为我甚至都不接近:

我的看法是:

<% @versions.sort_by do |version | version.country_order %>
   <%= render 'version_card', version: version %>
 <% end %>
最后在主控制器中(主控制器显示所有可用版本):

谢谢

在此基础上,我们可以先按发布年份排序,然后按特定国家/地区订单排序,然后按国家/地区本身排序

class Version
  SPECIAL_COUNTRY_ORDER = ["UK", "US", "DE", "FR", "JP"]

  attr_accessor :country_code, :release_year

  def initialize(country_code:, release_year:)
    @country_code = country_code
    @release_year = release_year
  end

  def special_country_order
    SPECIAL_COUNTRY_ORDER.index(country_code) || SPECIAL_COUNTRY_ORDER.size
  end

  def to_s
    "#{country_code} #{release_year}"
  end
end

versions = [
  Version.new(country_code: "DE", release_year: 1969),
  Version.new(country_code: "UK", release_year: 1969),
  Version.new(country_code: "JP", release_year: 1999),
  Version.new(country_code: "AA", release_year: 1999),
  Version.new(country_code: "BB", release_year: 1999),
  Version.new(country_code: "ZZ", release_year: 1999),
  Version.new(country_code: "BB", release_year: 2000)
]

puts versions.sort_by { |version|
  [version.release_year, version.special_country_order, version.country_code]
}
如果一个国家没有特殊的国家订单,它得到的数字比任何特殊国家都大。因为它更大,所以排序在它们下面。因为是同一个数字,所以排序会转到下一个排序键:国家代码本身

这是它的排序依据

[1969, 2, "DE"]
[1969, 0, "UK"]
[1999, 4, "JP"]
[1999, 5, "AA"]
[1999, 5, "BB"]
[1999, 5, "ZZ"]
[2000, 5, "BB"]
结果呢

UK 1969
DE 1969
JP 1999
AA 1999
BB 1999
ZZ 1999
BB 2000
在此基础上,我们可以首先按发布年份进行排序,然后按国家/地区的特殊订单进行排序,然后按国家/地区本身进行排序

class Version
  SPECIAL_COUNTRY_ORDER = ["UK", "US", "DE", "FR", "JP"]

  attr_accessor :country_code, :release_year

  def initialize(country_code:, release_year:)
    @country_code = country_code
    @release_year = release_year
  end

  def special_country_order
    SPECIAL_COUNTRY_ORDER.index(country_code) || SPECIAL_COUNTRY_ORDER.size
  end

  def to_s
    "#{country_code} #{release_year}"
  end
end

versions = [
  Version.new(country_code: "DE", release_year: 1969),
  Version.new(country_code: "UK", release_year: 1969),
  Version.new(country_code: "JP", release_year: 1999),
  Version.new(country_code: "AA", release_year: 1999),
  Version.new(country_code: "BB", release_year: 1999),
  Version.new(country_code: "ZZ", release_year: 1999),
  Version.new(country_code: "BB", release_year: 2000)
]

puts versions.sort_by { |version|
  [version.release_year, version.special_country_order, version.country_code]
}
如果一个国家没有特殊的国家订单,它得到的数字比任何特殊国家都大。因为它更大,所以排序在它们下面。因为是同一个数字,所以排序会转到下一个排序键:国家代码本身

这是它的排序依据

[1969, 2, "DE"]
[1969, 0, "UK"]
[1999, 4, "JP"]
[1999, 5, "AA"]
[1999, 5, "BB"]
[1999, 5, "ZZ"]
[2000, 5, "BB"]
结果呢

UK 1969
DE 1969
JP 1999
AA 1999
BB 1999
ZZ 1999
BB 2000

您能展示一个未排序和已排序数据的示例吗?
@versions.sort\u by!{| version |[version.release_year,version.country_order]}
应该可以工作。在您看来,只需
@versions.each do | version |
,因为控制器已经对数组进行了排序。顺便说一句
[master.country_代码,'UK','US','DE','FR','JP']。索引(country_代码)
是表示国家顺序的更简洁的方式。您可能想了解一下
您可以展示一个未排序和已排序数据的示例吗?
@versions.sort\u by!{| version |[version.release_year,version.country_order]}
应该可以工作。在您看来,只需
@versions.each do | version |
,因为控制器已经对数组进行了排序。顺便说一句
[master.country_代码,'UK','US','DE','FR','JP']。索引(country_代码)
是表示国家顺序的更简洁的方式。您可能想了解一下<代码>