Ordenar una matriz en función de un atributo que puede ser nulo en algunos elementos

Tengo una gran variedad de objetos

[<#a star=1  val=1>, <#a star=nil val=3> , <#a star=2  val=2>]

Necesito que la matriz se ordene por tiempo, luego por val

[ <#a star=2  val=2>, <#a star=1  val=1>, <#a star=nil val=3> ]

pero el uso de sort_by arroja un error porque el tiempo es nulo.

Estoy usando una forma fea de ordenar en este momento, pero estoy seguro de que hay una buena manera de hacerlo

starred=[]
@answers.each {|a| (starred << a) if a.starred }
@answers=@answers-starred
starred=starred.sort_by {|a| a.starred }.reverse
@answers=starred+@answers

Respuestas a la pregunta(3)

Su respuesta a la pregunta