3

ruby on rails に 2 つのオブジェクト配列があります。それらを組み合わせて、2 つの異なる属性で並べ替えたいと思います。これは可能ですか?

1 つは「Post」レコードの配列で、もう 1 つは「Talk」レコードの配列です。どちらも日付順にソートする必要があります。ただし、Post の場合、関連する属性は created_at ですが、Talk の場合は date_given です。これは、私が 2 つの異なるモデルを排除し、より柔軟な Post モデルに置き換えることを考えさせられるような頭痛の種です。

任意の考えをいただければ幸いです。

4

2 に答える 2

5

うまくいったことを試しましたが、それがこの問題を処理する最善の方法であるかどうかはわかりません。各モデルに sortable date というメソッドを追加し、必要な値に設定するだけです。これに関する問題の 1 つは、created_at が Time で、date_given が DateTime であったため、この投稿を使用して、Ruby で DateTime と Time との変換を処理しました。

talk.rb

def sortable_date
  date_given
end  

post.rb

def sortable_date
  created_at.to_datetime
end  

次に、コントローラーで-

@posts = Post.order('created_at DESC').limit(3)
@talks = Talk.order('date_given DESC').limit(3)

@news = @posts + @talks
@news.sort_by! &:sortable_date
@news = @news[1..4]

そして、ビューで @news をレンダリングするだけで、適切なパーシャルがうまく呼び出されます。フィードバックをいただければ幸いです。

于 2013-04-14T03:53:10.503 に答える