처음 로드할 때만\u 및\u authorize\u 리소스를 로드합니다.

4328 단어 cancan

묘사

이거 미친 짓이야.어떤 이유로 내 애플리케이션(Rails 3.2.13 및 Desive)에서 오류가 발생했습니다.
"'load and authorize resources'for Home Controller:Class'에 정의되지 않은 로컬 변수 또는 방법"
서버가 시작된 후 내가 페이지를 처음 눌렀을 때만이 초기 오류 이후, 만약 내가 다시 불러와서 어떤 내용도 바꾸지 않았다면, 페이지는 정상적으로 작동할 것이다.또한, 만약 내가 두 개의 브라우저 (한 개의 사파리, 한 개의 크롬) 를 열었다면, 첫 번째로 한 브라우저에서 그것을 클릭한 다음, 첫 번째로 다른 브라우저에서 그것을 클릭하면, 그것은 작동할 것이다.(즉, 나는 이것이 Desive와sessions 같은 이상한 것일 수도 있다고 생각한다.)
CanCan은 정상적으로 작동하는 것으로 알고 있습니다.보신 분 계세요?나는 심지어 어디서부터 시작해야 할지조차 모른다.

토론 #1

저는 Heroku에서 이 오류를 당해서 배치에 실패했습니다.

토론 #2

처음 불러올 때 그것을 얻을 것입니다. rails 4 베타 1이 개발 중

토론 #셋

은 완전히 우리의 문제입니다.파일 구성 오류입니다.
2013년 4월 25일 새벽 1:13, 마크 감도프[email protected]쓰기:

I'm getting it on the first load, rails 4 beta 1 in development

— Reply to this email directly or view it on GitHub.

토론 #4

I'm getting the error: ''undefined local variable or method `load_and_authorize_resources' ..


이 방법의 이름load_and_authorize_resource은 단수 아닙니까?이것은 단지 타자 오류일 뿐입니까?
또한 당신이 사용해야 할 방법이라고 가정하면 어떤 버전의 cancan을 사용합니까?너는 너의 GEM 파일에 적용되는 줄을 포함할 수 있니?

토론 #5

응, 네 말이 맞아.나는 확실히 복수 형식이 있다.그러나 그것을 바꾸는 것은 더 많은 문제를 가져올 것이다.현재, 만약 내가 나의 컨트롤러를 클릭한다면, 나는 다음과 같은 오류를 얻을 것이다. (부분 회상)
NameError- 상수 Home이 초기화되지 않았습니다.
(gem)activesupport-3.2.13/lib/active_support/dependencies.rb:520:const missingload_missing_constant' (gem) activesupport-3.2.13/lib/active_support/dependencies.rb:192:in블록
(gem)activesupport-3.2.13/lib/active_support/dependencies.rb:190:inconst_missing' (gem) activesupport-3.2.13/lib/active_support/inflector/methods.rb:230:inconstantize'
(gem)activesupport-3.2.13/lib/active_-support/influctor/methods.rb:229:inconstantize' (gem) activesupport-3.2.13/lib/active_support/core_ext/string/inflections.rb:54:inconstantize'
(gem)cancan-1.6.10/lib/cancan/controller_resource.rb:147:inresource_class' (gem) cancan-1.6.10/lib/cancan/controller_resource.rb:187:in 리소스 라이브러리
(gem)cancan-1.6.10/lib/cancan/controller_resource.rb:77:inload_collection?' (gem) cancan-1.6.10/lib/cancan/controller_resource.rb:33:in 리소스 로드'
(gem)cancan-1.6.10/lib/cancan/controller_resource.rb:25:inload_and_authorize_resource' (gem) cancan-1.6.10/lib/cancan/controller_resource.rb:10:in 블록에 필터 전에 추가
그래서 나는 디버깅을 깊이 들어가서 이 문제를 발견했다. 그것은 컨트롤러 자원의 147줄에 들어가고 있었다.줄을 서다
147 nil 다음에 name 으로 이름을 지정합니다.우리를 낙타화시키다.영구 불변하다
이름 공간 name 이 Home 으로 설정되어 있음을 표시합니다."Home Controller"라는 이름으로 ""Home Controller""객체를 상수화하려고 할 때 찾을 수 없습니다."다음은 내가 테스트한 Home Controller의 전체 내용입니다.
클래스 HomeController<어플리케이션 컨트롤러
리소스 로드 및 권한 부여
def 인덱스
#아무것도 하지 않고 클라이언트만 부팅
끝맺다
끝맺다
그리고 내 능력.rb
학급 능력
CanCan 포함: 기능
def 초기화(사용자)
can:manage,:all
끝맺다
끝맺다
나는 방금 gm를 1.6.10으로 갱신했다.이것은 매우 기본적인 테스트 응용 프로그램으로, 우리는 주로 일부 클라이언트의 물건을 테스트하는 데 쓰인다.따라서 현재 컨트롤러/모델의 수가 매우 적다.Desive를 사용하고 있지만 아직 구현되지 않았습니다.
만약 다른 사람들이 그것을 성공적으로 사용하고 있다면, 나는 그것이 내 편이라고 믿는다.나는 단지 도대체 왜 그런지 아직 이해하지 못했을 뿐이다.나는 새로운 프로젝트를 세우고 AsciCast를 통해 내가 무엇을 잘못했는지 피드백을 할 수도 있다.

토론 #6

자원이 없기 때문에 불러올 수 없습니다.위키Authorizing controller actions 를 참조하십시오.
삭제Home를 하고 각 방법load_and_authorize에서 사용할 수 있습니다.예를 들면 다음과 같습니다.
class HomeController < ApplicationController
  def index
    authorize! :index, :homepage
  end
end

class Ability
  include CanCan::Ability

  def initialize(user)
    can :index, :homepage
  end
end
당신에게 적합한 다른 설정도 있습니다. 이상은 단지 하나의 예일 뿐입니다.authorize!@davesands@jaredbeck이 맞습니다. 컨트롤러가 아닌 모델을 불러오려고 시도합니다@jaredbeck의 해결 방안은 효과가 있을 것입니다. 그리고:

토론 #7

대신 Homeauthorize_resource class: false

얼굴 종려나무.나는 또 다른 예를 따랐다. 이것은 자원이어서 생각하지 않았다.나는 나의 심부름에 대해 사과한다.이것은 매우 일리가 있다.

좋은 웹페이지 즐겨찾기