How do I add my own posts plus following users post with Acts_As_Follower Rails 4

I've been trying to combine my own post with the users that I follow in
chronological order DESC. Can you help me build the proper query method
for it?

What I currently have is the code below

def feed
  following_ids = current_user.following_users.map(&:id)
  @following_activities =
Post.where(user_id:following_ids).order("created_at
desc").paginate(page:params[:page])
    @following_activities << current_user.posts.order('created_at
desc').all
    @following_activities = @following_activities.flatten.sort_by
{|post| post.created_at }
end

Feed.html.erb
  <% if @following_activities.any? %>
      <% @following_activities.each do |user| %>
          <%= link_to(image_tag(user.avatar.url(:thumb), style:
'text-decoration: none;', class: 'round-image-50-trendy-warrior'),
user_path(user)) %>
          <%= user.post.username %>
          <%= user.post.body %>
          <%= image_tag(user.post.photo.url(:medium), style: '') %>
      <% end %>
  <% else %>
      <h1>No new posts</h1>
  <% end %>

The approach that I'm using is not causing any server errors. But, I'm
not seeing the post that I've already created, they aren't being loaded.

How about just adding the current_user.id to the following_ids array? You could then pull all the posts in one shot, and remove the next two lines.

~Marc

Mahcsig wrote in post #1181844:

How about just adding the current_user.id to the following_ids array?
You
could then pull all the posts in one shot, and remove the next two
lines.

~Marc

~Mahcsig

Can you write-out your approach to simplify/refactor the code above???

def feed

following_ids = current_user.following_users.map(&:id)

following_ids << current_user.id

@following_activities = Post.where(user_id:following_ids).order(“created_at desc”).paginate(page:params[:page])

end

I've been trying to combine my own post with the users that I follow in
chronological order DESC. Can you help me build the proper query method
for it?

What I currently have is the code below

def feed
  following_ids = current_user.following_users.map(&:id)
  @following_activities =
Post.where(user_id:following_ids).order("created_at
desc").paginate(page:params[:page])

I don't think you want paginate here, and since you are going to sort
it again later there is no point sorting here either.

    @following_activities << current_user.posts.order('created_at
desc').all

You want + here not << as you just want to concatenate the arrays,
then you will not need to flatten in the next line. Also no need to
sort in line above

    @following_activities = @following_activities.flatten.sort_by
{|post| post.created_at }
end

As I said above, no need for the flatten

Also, assuming that you have User has_many following_users and User
has_many posts then you should be able to say something like
User has_many following_posts through following_users ...
You will need a bit more on the end get it to work, not exactly sure
what you need there. Perhaps someone else will know exactly what you
need. Then you will be able to say
current_user.following_posts
to get all those posts.

So you will be able to say
@following_activities = (current_user.posts +
current_user.following_posts).sort....

Colin

Mahcsig wrote in post #1181846:

def feed
  following_ids = current_user.following_users.map(&:id)
  following_ids << current_user.id
  @following_activities =
Post.where(user_id:following_ids).order("created_at
desc").paginate(page:params[:page])
end

~Mahcsig

I'm getting an error for the user's avatar image. For whatever reason,
it's not seeing the full user model with attributes included. I'm using
Carrierwave btw.

<%= link_to(image_tag(user.avatar.url(:thumb), style: 'text-decoration:
none;', class: 'round-image-50'), user_path(user)) %>

undefined method `avatar' for #<Post:0xe2e9138>

But, I see that it is loading the information within the instance
variables.

Colin Law wrote in post #1181847:

Iterating over the @following_activities instance variable is giving me
errors for user.avatar.url and user.post. I don't understand why it's
not collecting all of the information from the user object.

<% if @following_activities.any? %>
      <% @following_activities.each do |user| %>
          <%= link_to(image_tag(user.avatar.url(:thumb), style:
'text-decoration: none;', class: 'round-image-50-trendy-warrior'),
user_path(user)) %>
          <%= user.post.username %>
          <%= user.post.body %>
          <%= image_tag(user.post.photo.url(:medium), style: '') %>
      <% end %>
  <% else %>
      <h1>No new posts</h1>
  <% end %>

Iterating over the @following_activities instance variable is giving me
errors for user.avatar.url and user.post. I don't understand why it's
not collecting all of the information from the user object.

<% if @following_activities.any? %>
      <% @following_activities.each do |user| %>

In the code you posted earlier the activities are Post objects not
User objects. Possibly you want
@following_activities.each do |post|
and then post.user.photo.... etc

Colin

Colin Law wrote in post #1181852:

Colin Law wrote in post #1181852:

Iterating over the @following_activities instance variable is giving me
errors for user.avatar.url and user.post. I don't understand why it's
not collecting all of the information from the user object.

<% if @following_activities.any? %>
      <% @following_activities.each do |user| %>

In the code you posted earlier the activities are Post objects not
User objects. Possibly you want
@following_activities.each do |post|
and then post.user.photo.... etc

Colin

It's working now. Thank you and Mahcsig for helping me.

Just to point out that the fundamental mistake you made here was
calling it @following_activities. If you had called it
@following_posts or something similar then you would probably fnot
have made the error.
For the future simple debugging can be achieved by inserting logger
output in the code at appropriate points, so for example if after the
line
<% @following_activities.each do |user| %>
you insert the line
logger.info "user = #{user.inspect}"
then the debug would be inserted into log/development.log which would
probably have enabled you to see the problem.

Colin

Colin Law wrote in post #1181854: