0

我有一种方法可以在我的机器上本地运行,但在 Heroku 中失败了。Heroku 日志说:

NoMethodError(nil:NilClass 的未定义方法“事件”)

我已经将 heroku 控制台用于此方法的等效方法,并且它可以工作,因此有支持它的数据。方法是:

 def index
    @events = current_user.school.events
 end

我正在使用我相信它给了我 current_user 方法的设计。等价的 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 回答