2016-07-21 14 views
0

管理者がユーザーの承認を必要とするアプリ(Rails 5)を設定しています。私はhttps://github.com/plataformatec/devise/wiki/How-To%3a-Require-admin-to-activate-account-before-sign_inの指示に従ってすべてを設定しましたが、私はNousethErrorの未定義のメソッドをそれぞれnil:NilClassに渡します。ここに私のusers_controller.rbRuby on Railsの開発:管理者の承認が必要な場合は@usersは不要です

def index 
    if params[:approved] == "false" 
    @users = User.find_by_approved(false) 
    else 
    @users = User.all 
    end 
end 

ユーザーモデルuser.rb

class User < ApplicationRecord 
    # Include default devise modules. Others available are: 
    # :confirmable, :lockable, :timeoutable and :omniauthable 
    devise :database_authenticatable, :registerable, 
    :recoverable, :rememberable, :trackable, :validatable, :confirmable 

    def active_for_authentication? 
    super && approved? 
    end 

    def inactive_message 
    if !approved? 
     :not_approved 
    else 
     super 
    end 
    end 
end 

routes.rbを

Rails.application.routes.draw do 
    devise_for :admins 
    devise_for :users, except: [:index] 
    resources :users, only: [:index] 

    get 'home/index' 

    get 'home/about' 

    get 'home/products' 

    get 'home/agents' 

    get 'home/contact' 

    get 'home/documents' 

    get 'users/admin_page' 

    root 'home#index' 

end 

とユーザーで私のビューからテーブル/ admin_page.html.erb

です
<%= link_to "All Users", :action => "index" %>| 
<%= link_to "Users awaiting approval", :action => "index", :approved => "false" %> 
<table> 
    <% @users.each do |user| %> 
    <tr> 
     <td><%= user.email %></td> 
     <td><%= user.approved %></td> 
     <td><%= link_to "Edit", edit_user_path(user) %></td> 
    </tr> 
    <% end %> 
</table> 

私は周りを見回しました他のソリューションや@usersが定義されない理由はありますが、何も見つかりません。

+0

'@users = User.find_by_approved(false)'を '@users = User.where(approved:false)'に変更して問題が解決したかどうかを確認してください。 – mrvncaragay

+0

これを試したところ、まだnilとして表示されています。私はまた、その部分を完全に取り出して、それを@users = User.allとして定義しようとしましたが、それも同様に定義されていませんでした。 –

答えて

0

find_by_のメソッドは単一のオブジェクトを返すことを目的としています。存在しない場合はnilを返します。まだ承認されていないユーザーのコレクション全体が必要です。

@users = User.where(approved: false) 
0

私はそれを理解しました。私は自分のUsersControllerで私のメソッドを誤って命名しました。私のビューはadmin_page.rbという名前ですが、私は自分のメソッドインデックスに名前を付けました。返事をいただいた皆様に感謝します。

関連する問題