我有一个包含三个不同模型的对象数组。其中两个具有类别的共同属性,而我们刚刚添加的第三个属性没有。我想使用前两个的类别名称和第三个的对象名称按字母顺序对数组进行排序。由于它们都是字符串,这似乎是可能的,但我不知道如何使其工作。
我的控制器:
def index
@opportunities = Opportunity.non_historical_active.order("title")
@recommendations = Recommendation.active
@fast_content = FastContent.where(:approved => true)
@skills = (@recommendations + @opportunities + @fast_content)
我视图中显示的数组:
<% Array(@skills.sort_by{ |skill| skill.opportunity_category.name}).each_with_index do |opp, i| %>
在我们将@fast_content变量添加到@skills之前,此数组已运行。
答案 0 :(得分:2)
假设Opportunity
和Recommendation
应按opportunity_category.name
排序,FastContent
应按name
排序,这样可行:
@skills.sort_by { |skill|
case skill
when Opportunity, Recommendation
skill.opportunity_category.name
when FastContent
skill.name
end
}
另一种选择是为所有三个类添加一个通用方法:
class Opportunity < ActiveRecord::Base
def sort_name
opportunity_category.name
end
end
class Recommendation < ActiveRecord::Base
def sort_name
opportunity_category.name
end
end
class FastContent < ActiveRecord::Base
def sort_name
name
end
end
然后使用它:
@skills.sort_by(&:sort_name)