2012-05-23 3 views
0

내 컴퓨터에서 로컬로 작동하지만 Heroku에서는 실패하는 메소드가 있습니다.Rails/Heroku : 정의되지 않은 메소드 'events'for nil : NilClass

NoMethodError (전무에 대한 정의되지 않은 메서드`이벤트 ': NilClass)에게 Heroku 로그는 말을 나는이 방법의 동등한에 대한 Heroku가 콘솔을 사용했다

하고 그렇게 작동을 지원하는 데이터가있다. 방법은 다음과 같습니다.

def index 
    @events = current_user.school.events 
end 

나는 현재의 사용자 메소드를 제공하는 Devise를 사용하고 있습니다. 이에 해당하는 a = User.first.school.events는 데이터와 함께 실제 인스턴스 값을 산출합니다. User.first는 올바른 데이터를 산출합니다. 여기

내 모델입니다 :

class School < ActiveRecord::Base 
    #validates_presence_of :name 

    has_many :events, :dependent => :destroy 
    has_many :users, :dependent => :destroy 
    belongs_to :user 
    belongs_to :event 

    def self.fetch_for_name(_name) 
    school = self.new(:name => _name) 
    end 
end 

class User < ActiveRecord::Base 
    belongs_to :school 

    rolify 
    devise :database_authenticatable, :registerable, 
     :recoverable, :rememberable, :trackable, :validatable 

    attr_accessible :name, :email, :password, :password_confirmation, :remember_me 
end 

class Event < ActiveRecord::Base 

    belongs_to :school 

end 

내가하지만 몇 가지 간단한 기본적인 것을 간과 경우 나 같은 것 내가 제대로 Heroku가 콘솔에서이 작업을 수행 할 수 있다면, 왜이 방법을 바꿈 것. 관련없는 또 다른 페이지가 Heroku에서 올바르게 작동합니다.

+1

학교 모델에서 'has_and_belongs_to_many : users'를 사용하지 않는 이유는 무엇입니까? current_user와 연관된 '학교'레코드가 없기 때문에 오류가 발생합니다. 'School' 모델에서 DB 외래 키와 관계 로그인을 확인해야합니다. – thesis

+0

경험이 없을 것 같습니까? 당신이 제안한 것처럼 관계를 통합 할 때, 그것은 : 종속적 인 절을 좋아하지 않았습니다. Yanking은 이전과 같이 로컬에서 작동합니다. 하지만 관련 레코드를 삭제할 수있는 기능이 필요합니다. 왜 그것이 Heroku에서 작동하지 않는지에 관해서는, 나는 내 관계를 믿고 사용자의 school_id 필드가 있습니다. current_user와 User.first가 같지 않다고 제안하고 있습니까? 이 Heroku 응용 프로그램에서 pry를 사용하는 방법이 있습니까? 내가 말했듯이, 그것은 지역에서 효과가 있습니다. – sam452

답변

3

current_user는 로그인 한 사용자입니다. 반드시 User.first를 의미하지는 않습니다. 이것은 Heroku에서와 동일하게 로컬이어야합니다. 당신은 사용자가 응용 프로그램 컨트롤러

before_filter :debug 

def debug 
    Rails.logger.info("Current User is: #{current_user.inspect}") 
end 

이를 추가 할 수 있습니다 로그인 그리고 $ heroku logs --tail와 출력을 볼 수 있는지 알아내는 데 문제가있는 경우, 그것은 당신에게 CURRENT_USER의 현재 값을 표시해야합니다. 하루가 끝날 무렵 @thesis는 정확하다고 말했고, 당신에게는 그와 관련된 학교가없는 사용자가 있습니다.

+0

네, 그것은 논문이 말한대로입니다. 하나의 사용자 레코드로도 User.first는 current_user와 같지 않습니다. 기록이 school_id로 저장되었는지 확인하면 이제 방법이 영웅에서 작동 함을 의미합니다. 둘 다에게 감사드립니다. – sam452

관련 문제