0

自分のマシンでローカルに機能するメソッドがありますが、Herokuでは失敗します。Herokuのログによると:

NoMethodError(nil:NilClassの未定義のメソッド `events')

私はこのメソッドと同等の方法でherokuコンソールを使用しましたが、それをサポートするデータがあるので機能します。方法は次のとおりです。

 def index
    @events = current_user.school.events
 end

私は、current_userメソッドを提供すると信じている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で正しく機能します。

4

1 に答える 1

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が正しいと言ったのは、学校が関連付けられていないユーザーがいるということです。

于 2012-05-23T15:37:15.937 に答える