Banner
Banner

Reputation: 603

undefined method `total_pages' for #<Review:0x007fe460871f08>

The error output is:

undefined method `total_pages' for #<Review:0x007fe460871f08>

Movie#Show:

  def show
    @review = @movie.reviews.paginate(page: params[:page], per_page: 6).order('created_at DESC').build
  end

I set @movie via before_filter.

My view:

  <% if @movie.now_playing %>
    <% if @movie.reviews.any? %>
      <% @movie.reviews.each do |review| %>
        <div id="each_review_container">
          <span><%= link_to @movie.creator.name, user_path(@movie.creator) %> | </span>
          <span id="time"><%= review.created_at.try(:strftime,'%b %d, %Y') %></span>
          <p>Rating: <%= review.rating %>/10</p>
          <p><%= review.content %></p>
        </div>
      <% end %>
      <div class="digg_pagination"><%= will_paginate @review %></div>
    <% else %>
      <span id="review_message">No Reviews yet!</span>
      <span id="add_new_review_link"><%= link_to 'Add New Review', new_movie_review_path(@movie) %></span>
    <% end %>
  <% else %>
    <p id="review_message">You will be able to submit a review when the movie releases</p>
  <% end %>

Restarted my server and I get the same error.

Been stuck on this for a while and would appreciate any assistance, thanks!

Upvotes: 0

Views: 117

Answers (2)

rakeshpatra
rakeshpatra

Reputation: 761

In Your view ,you are calling @movie.reviews Why are you writing @movie.reviews in loop ?You should be using @review of action instead.It is firing query every time you call it.

@movie.reviews in your view is causing error here's guess,since it doesn't include pagination parameter and you are trying to pagination through it.

Upvotes: 0

Arsen
Arsen

Reputation: 10961

It looks like a bug, I think you want to get reviews not one review:

def show
    @reviews = @movie.reviews.order('created_at DESC').paginate(page: params[:page], per_page: 6)
end

View:

  <% if @movie.now_playing %>
    <% if @reviews.any? %>
      <% @reviews.each do |review| %>
        <div id="each_review_container">
          <span><%= link_to @movie.creator.name, user_path(@movie.creator) %> | </span>
          <span id="time"><%= review.created_at.try(:strftime,'%b %d, %Y') %></span>
          <p>Rating: <%= review.rating %>/10</p>
          <p><%= review.content %></p>
        </div>
      <% end %>
      <div class="digg_pagination"><%= will_paginate @reviews %></div>
    <% else %>
      <span id="review_message">No Reviews yet!</span>
      <span id="add_new_review_link"><%= link_to 'Add New Review', new_movie_review_path(@movie) %></span>
    <% end %>
  <% else %>
    <p id="review_message">You will be able to submit a review when the movie releases</p>
  <% end %>

Upvotes: 2

Related Questions