0

私は、created_at でソートされた 2 つの異なるモデルからの項目を表示するアクティビティ メニューを持っています。

個々のモデルからアイテムを反復およびソートする方法は知っていますが、結果を結合しようとすると. 属性が異なるため、反復できません。したがって、以下は意味がありません。

<% @post_and_events = @posts + current_user.events %>
  <% for both in @post_and_events %>
    <%= both.? %>
  <% end %>
<% end %>

投稿はイベントとは異なる属性を持っているためです。

私の頭の中で、それらを別々にソートすることを考えていますが、一方の結果を次に他方の結果を表示するのではなく、グループとして表示@postおよびソートする方法がわかりません。@events

フォローアップ:これ

4

3 に答える 3

1

ビューではなく、コントローラーで作業するデータセットを作成する必要があります。次のようなものでそれを行うことができます:

first_thing  = FirstModel.all
second_thing = SecondModel.all
@both_things = (first_thing + second_thing).sort_by { |thing| thing.created_at }

ビューでデータセットを反復処理し、次のようなものを使用して属性を選択的に表示できます。

<% @both_things.each do |thing| %>
  <%= thing.attribute_one if thing.is_a? FirstModel %>
  <%= thing.attribute_two if thing.is_a? SecondModel %>
<% end %>

さまざまな可能性/属性がたくさんある場合、それは手に負えなくなる可能性があります。その場合、たとえば2 つのパーシャル_show_thing_one.html.erbを設定することをお勧めします。_show_thing_two.html.erbビューで、表示されているものに基づいてパーシャルを選択的に使用します。

<% @both_things.each do |thing| %>
  <% if thing.is_a?(FirstModel) %>
    <%= render 'show_thing_one', thing: thing %>
  <% elsif thing.is_a?(SecondModel) %>
    <%= render 'show_thing_two', thing: thing %>
  <% end %>
<% end %>

各パーシャルでは、変数thingを使用して、渡される項目を参照できます (これthing: thingは、行の一部renderが行っていることです。詳細については、こちらを参照してください)。FirstModelしたがって、各パーシャルはまたはに対して完全にカスタマイズできますSecondModel

于 2013-10-02T17:00:25.007 に答える
0

以下のようなものがあなたのために働きますか?これがあなたが探しているものかどうかわかりません

<% @values = @posts.collect(&post_attribute) + current_user.user_attribute %>
<% for value in @values %>
  <%= value%>
<% end %>
于 2013-10-02T16:48:52.497 に答える