Ruby on rails 有没有一种方法可以根据特定的顺序对Rails中的国家进行排序?
我试图按国家/地区订购Rails中的阵列,但我希望某些国家/地区的性能高于其他国家/地区,例如英国为1,美国为2,德国为3,等等 更复杂的是,我首先需要按年订购。比如说,如果一个记录是1969年在英国创造的,我想先在1969年在德国创造一个记录 我尝试了以下方法,但我认为我甚至都不接近: 我的看法是: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',
<% @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_代码)
是表示国家顺序的更简洁的方式。您可能想了解一下<代码>