ruby on rails - NoMethodError in MembersController#index undefined method `total_pages' for #<Micropost::ActiveRecord_Associations_CollectionProxy:0x007ffc26104288> -
the error output is:
nomethoderror in memberscontroller#index undefined method `total_pages' #<micropost::activerecord_associations_collectionproxy:0x007ffc26104288>
application trace is:
app/views/shared/_feed.html.erb:5:in `_app_views_shared__feed_html_erb__933429040368905157_70360748756160' app/views/members/index.html.erb:4:in `_app_views_members_index_html_erb__2919315027143638402_70360970104820'
update:
source near error:
arel.public_send(method, *args, &block) else super # marked red end end end
additional info:
app/views/members/index.html.erb
renders 2 partials using controller, microposts_controller
. i'll show contents of both controllers , of 2 partials.
# app/views/members/index.html.erb <%= render 'shared/micropost_form', :locals => { :micropost => @micropost } %> <%= render 'shared/feed', :locals => { :feed_items => @feed_items } %>
memberscontroller
class memberscontroller < applicationcontroller def index @micropost = current_user.microposts.build @feed_items = current_user.microposts end end
micropost_controller.rb
# controllers/micropost_controller.rb class micropostscontroller < applicationcontroller before_action :logged_in_user, only: [:create, :destroy] before_action :correct_user, only: :destroy def create @micropost = current_user.microposts.build(micropost_params) if @micropost.save flash[:success] = "micropost created!" redirect_to '/members' else @feed_items = [] render '/members' end end def destroy @micropost.destroy flash[:success] = "micropost deleted" redirect_to request.referrer || '/members' end private def micropost_params params.require(:micropost).permit(:content, :picture) end def correct_user @micropost = current_user.microposts.find_by(id: params[:id]) redirect_to '/members' if @micropost.nil? end end
_micropost_form.html.erb
# shared/_micropost_form.html.erb <%= form_for(@micropost, html: { multipart: true }) |f| %> <%= render 'shared/error_messages', object: f.object %> <div class="field"> <%= f.text_area :content, placeholder: "compose new micropost (420 chars max)..." %> </div> <%= f.submit "post", class: "btn btn-primary" %> <span class="picture"> <%= f.file_field :picture, accept: 'image/jpeg,image/gif,image/png' %> </span> <% end %> <script type="text/javascript"> $('#micropost_picture').bind('change', function() { size_in_megabytes = this.files[0].size/1024/1024; if (size_in_megabytes > 5) { alert('maximum file size 5mb. please choose smaller file.'); } }); </script>
_feed.html.erb
# shared/_feed.html.erb <% if @feed_items.any? %> <ol class="microposts"> <%= render @feed_items %> </ol> <%= will_paginate @feed_items %> <% end %>
you want paginate records using will_paginate
in view, didn't paginate them in controller:
def index @micropost = current_user.microposts.build @feed_items = current_user.feed.paginate(page: params[:page]) end
Comments
Post a Comment