【问题标题】:will_paginate not working, returning an error of undefined method `total_pages'will_paginate 不起作用,返回未定义方法“total_pages”的错误
【发布时间】:2016-04-16 05:41:42
【问题描述】:

我正在尝试对微博进行分页。我使用以下内容: 但它返回一个错误: 未定义的方法 `total_pages' 用于# 请帮忙 我的控制器方法如下:

class UsersController < ApplicationController
  before_filter :signed_in_user, only: [:index,:edit, :update]
  before_filter :correct_user, only: [:edit, :update]
  before_filter :admin_user, only: :destroy
  def index
    @users = User.paginate(page: params[:page])
    @microposts = @user.microposts.paginate(page: params[:page])
  end
  def new
     @user = User.new
  end
  def show
     @user = User.find(params[:id])
  end
  def destroy
    User.find(params[:id]).destroy
    flash[:success] = "User destroyed."
    redirect_to users_path
  end
  def update
    @user = User.find(params[:id])  
    if params[:user].present? &&    @user.update_attributes(params.require(:user).permit(:name,:password,  :password_confirmation))
   flash[:success] = "Profile updated"
   sign_in @user
   redirect_to @user
   else
    render 'edit'
   end
  end


  def edit
    @user = User.find(params[:id])  
    if params[:user].present? &&    @user.update_attributes(params.require(:user).permit(:name,:password, :password_confirmation))
    flash[:success] = "Profile updated"
    sign_in @user
    redirect_to @user
    else
     render 'edit'
    end
   end

  def create
    @user=  User.create(user_params)
    if @user.save
    sign_in @user
    flash[:success] = "Welcome to the Sample App!"
    redirect_to @user
    else
     render 'new'
    end
   end


   private
     def user_params
       params.require(:user).permit(:password, :password_confirmation,   :email,:name)
     end 
   private
     def signed_in_user
      unless signed_in?
      store_location
      redirect_to signin_path, notice: "Please sign in." 
     end
    end
  def correct_user
    @user = User.find(params[:id])
    redirect_to(root_path) unless current_user?(@user)
  end
 end  

【问题讨论】:

  • 能否请您发布您的控制器方法。
  • 您是使用.page 还是.paginate 方法来加载记录?如果你只是打电话给.all,will_paginate 不起作用
  • 我正在使用 .paginate 方法
  • 我在 users_controller 中添加了@user = User.find(params[:id]),但它产生了同样的错误

标签: ruby-on-rails ruby ruby-on-rails-3 ruby-on-rails-4 rubygems


【解决方案1】:

你可以试试这个

<%= will_paginate @microposts %> 

改为

<%= will_paginate @user.microposts %> 

【讨论】:

    【解决方案2】:

    这里:@microposts = @user.microposts.paginate(page: params[:page])

    @user 没有在index 中定义,也没有在任何before_filter 中设置(如果您使用的是Rails 4.*,before_action 是新语法。before_filter 是Rails 5 中的deprecated

    已编辑:@Sukanta 的观点是正确的

    【讨论】:

      【解决方案3】:

      before_filter :correct_user, only: [:edit, :update] 表示 correct_user 方法仅适用于编辑和更新方法。要使用索引方法,您需要将索引方法添加到列表中。 IE, before_filter :correct_user, only: [:index, :edit, :update] 并且,还要使用 before_action 而不是 before_filter。

      【讨论】:

        猜你喜欢
        • 2010-11-27
        • 1970-01-01
        • 1970-01-01
        • 2011-09-15
        • 2016-07-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多