Ruby と Rails は初めてです。アプリで Rails_Admin と一緒に Devise と CanCan を使用しています。私はやろうとしています->ユーザーがすでにログインしていて、それが管理者の場合、それが管理者ではなく単なるユーザーの場合はrails_admin_pathにリダイレクトし、ログインしていない場合は「upload_path」にリダイレクトし、次にsign_inパスにリダイレクトします、しかし、おそらく知識が不足しているため、無限のリダイレクトループを作成しています。「require_login」フィルターなしで sign_in にアクセスしようとしても。
これまでに行ったことは次のとおりです: application_controller.rb
class ApplicationController < ActionController::Base
before_filter :require_login
protect_from_forgery
#IDEA 1
#def require_login
# if current_user.role? == 'Administrator'
# redirect_to rails_admin_path
# elsif current_user.role? == (('C1' or 'D1') or ('M1' or 'M2'))
# redirect_to upload_path
# end
# end
#I saw this somewhere and It doesn't work either
def require_login
redirect_to new_user_session_path, alert: "You must be logged in to perform this action" if current_user.nil?
end
rescue_from CanCan::AccessDenied do |e|
redirect_to new_user_session_path, alert: e.message
end
end
ルート.rb
Siteconfigurationlistgenerator::Application.routes.draw do
mount RailsAdmin::Engine => '/admin', :as => 'rails_admin'
devise_for :users
# The priority is based upon order of creation:
# first created -> highest priority.
match 'upload' => 'upload_file#new'
.
.
.
アビリティ.rb
class Ability
include CanCan::Ability
def initialize(user)
#Define abilities for the passed in user here.
user ||= User.new #guest user (not logged in)
#a signed-in user can do everything
if user.role == 'Administrator'
#an admin can do everything
can :manage, :all
can :access, :rails_admin # grant access to rails_admin
can :dashboard # grant access to the dashboard
elsif user.role == (('C1' or 'M1') or ('D1' or 'M1'))
# can :manage, [ProductList, Inventory]
# can :read, SiteConfigurationList
# end
end
end
rake ルートを実行すると、Devise ルートと Rails_admin ルート、さらに「アップロード」ルートが取得されます。私は本当にこのばかげたエラーを修正しようとしましたが、正直なところアイデアがありませんでした。あなたが私に提供できる助けをいただければ幸いです。前もって感謝します。