0

home.html.erb2 つのレンダリングを結合しようとしているstatic_page に 1 つのフィードがあります。

これが私が意味することです:

まず、これは私のコントローラーです

class StaticPagesController < ApplicationController
  def home
    if signed_in?
      @micropost = current_user.microposts.build
      @activities = PublicActivity::Activity.order("created_at desc").paginate(page: params[:page]) 
      @feed_items = current_user.feed.paginate(page: params[:page]) 
    else
    redirect_to root_path  
    end
  end

これは私がビュー内で使用しているものです

<%= render partial: 'shared/feed_item', collection: @feed_items %>
<%= will_paginate @feed_items %>

I want to join intoでレンダリングされているビューshared/feed_itemを次に示します。これにより、両方が同じリストに降順で表示されます@feed_items@activities@feed_items

<li id="<%= feed_item.id %>">
<br>
  <%= link_to gravatar_for(feed_item.user), feed_item.user %>
  <%= link_to feed_item.user.name, feed_item.user %>
  <span class="textname">shared this</span><span class="timestamp"> <%= time_ago_in_words(feed_item.created_at) %> ago.
  </span>  
  </li>

if-else の何らかの形式を使用して、@activities以下のこのビューを上記のコードに統合して、それらを 1 つのリストの一部にすることはできますか?

<li>

  <% if activity.trackable_type == "Micropost" %>
    <span class="user"><%= link_to activity.owner.name, activity.owner if activity.owner %></span><span class="textname"> posted this</span><span class="timestamp"> <%= time_ago_in_words(activity.created_at) %> ago.
  </span>
  <% else %>
   <span class="user"><%= link_to activity.owner.name, activity.owner if activity.owner %></span><span class="textname"> made a comment</span><span class="timestamp"> <%= time_ago_in_words(activity.created_at) %> ago.
  </span>
  <% end %>
</li>

_activity.html.erb と _feed_items.html.erb を結合して作成した完全な _item.html.erb

<li>
<% if item.class == PublicActivity::Activity %>
   <% if activity.trackable_type == "Post" %>
     <%= link_to activity.owner.name, activity.owner if activity.owner %><span class="textname"> posted </span><span class="timestamp"> <%= time_ago_in_words(activity.created_at) %> ago.
  </span>
  <% else %>
   <%= link_to activity.owner.name, activity.owner if activity.owner %><span class="textname"> made a comment</span><span class="timestamp"> <%= time_ago_in_words(activity.created_at) %> ago.
  </span>
  <% end %>
<% else %>

<br>
   <span class="user">
    <%= link_to feed_item.user.name, feed_item.user %>
      </span>
      <span class="textname">shared this</span><span class="timestamp"> <%= time_ago_in_words(feed_item.created_at) %> ago.
  </span>

  </li>
  <% end %>
4

1 に答える 1

0

アクティビティとフィードの両方を含む配列を作成できます。

コントローラーで:

...
@items = @activities + @feed_items
@items.sort_by{|item| item.class == Activity ? item.an_activity_field : item.a_feed_item_field}
...

そしてあなたの見解では:

<%= render partial: 'shared/partial_name', collection: @items %>
<%= will_paginate @items %>

そしてあなたの部分的に:

<% if item.class == Activity %>
  # activity display stuff
<% else %>
  # feed display stuff
<% end %>

これに従うと、ページネーションにさらにロジックを追加する必要があります。

于 2013-04-30T04:14:49.437 に答える