Display Posts on Homepage
I am building a social app and I want to display the content of the /posts page (index.html.erb) on the homepage if a user is logged in.
The code below works just fine on the /posts page to display the list of posts. However, when I try to use it on the Home page it throws the error "undefined method `each' for nil:NilClass"
Any suggestions on how to adjust the <% @posts.each do |post| %> so it works on the Home page? Or, should I direct users to the Posts page with a <% if user_signed_in? %> as a replacement for the home page?
<% @posts.each do |post| %>
<%= post.created_at.strftime("%b %e, %Y") %>
<%= post.user.name.full %>
<%= post.content %>
<%= link_to 'Show', post %>
<% if post.user == current_user %>
<%= link_to 'Edit', edit_post_path(post) %>
<%= link_to 'Delete', post, method: :delete, data: { confirm: 'Are you sure?' } %>
<% end %>
<% end %>
Hey Mike,
If you want to list posts on the homepage, you just need to query for them in your homepage's controller action.
def index
@posts = current_user.posts if user_signed_in?
end
```
Also if you use Devise, you can actually change the root when a user is logged in which I find to be the most easy option for modifying the homepage when a user is logged in. That way you can point it to any controller action and it'll be separated out nicely.
```
# config/routes.rb
authenticated :user do
root to: "posts#index"
end
root to: "homepage#show"
```
You rock Chris! Thank you.
The second solution of routing to "posts#index" was exactly what I had in mind.