All threads / Display Posts on Homepage

Ask A Question

Notifications

You’re not receiving notifications from this thread.

Display Posts on Homepage

MikeLangford asked in Rails

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.

    Join the discussion

    Want to stay up-to-date with Ruby on Rails?

    Join 33,399+ developers who get early access to new tutorials, screencasts, articles, and more.

      We care about the protection of your data. Read our Privacy Policy.

      logo Created with Sketch.

      Ruby on Rails tutorials, guides, and screencasts for web developers learning Ruby, Rails, Javascript, Turbolinks, Stimulus.js, Vue.js, and more. Icons by Icons8

      © 2020 GoRails, LLC. All rights reserved.