【发布时间】:2019-09-06 08:50:18
【问题描述】:
如何将两个模型的排序代码合并为一个? 我有两个模型,作者和书籍。
我得到 Author 和 Book 数据,对其进行排序,最后将这两个数据连接起来。
sorted_author = author.sort do |a, b|
if a.name.nil? || a.amount.nil?
-1
elsif b.name.nil? || b.amount.nil?
1
else
[a.name, a.amount] <=> [b.name, b.amount]
end
end
sorted_book = book.sort do |a, b|
if a.data.nil? || a.price.nil?
-1
elsif b.data.nil? || b.price.nil?
1
else
[a.data, a.price] <=> [b.data, b.price]
end
end
sorted_author.concat(sorted_book)
问题是日期会分开排序,我需要两个数组作为一个排序。
我可以做这样的事情。
author.concat(book).sort_by do |a|
if a.instance_of? Author
[a.name, a.amount]
else
[a.data, a.price]
end
end
但如果在这里,例如,名称、日期、价格为 nil,那么排序将以错误结束。
【问题讨论】:
-
您现有的代码将所有书籍(排序)放在作者(排序)之后。如果您将
concat放在前面,那么与[2019 Sep 06, 50.00]相比,您希望["Orwell", 100]的位置如何? -
这有点像X&Y problem。您很可能应该对数据库中的记录进行排序,而不是将它们拔出并在无法扩展的 ruby 中进行。我鼓励您少关注当前的解决方案,并提供模型和数据以及所需输出的示例。
-
@max 是什么让你觉得有数据库曾经?
标签: ruby-on-rails ruby