管理者がユーザーの承認を必要とするアプリ(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が定義されない理由はありますが、何も見つかりません。
'@users = User.find_by_approved(false)'を '@users = User.where(approved:false)'に変更して問題が解決したかどうかを確認してください。 – mrvncaragay
これを試したところ、まだnilとして表示されています。私はまた、その部分を完全に取り出して、それを@users = User.allとして定義しようとしましたが、それも同様に定義されていませんでした。 –