对象未在Ruby中初始化

时间:2014-03-29 03:17:30

标签: ruby-on-rails ruby

我在Rails工作并拥有以下课程:

class Player < ActiveRecord::Base
    attr_accessor :name, :rating, :team_name
    def initialize(name, rating, team_name)
        @name = name
        @rating = rating
        @team_name = team_name
    end
end

当我跑步时

bundle exec rails console

并尝试:

a = Player.new("me", 5.0, "UCLA")

我回来了:

 => #<Player not initialized>

我不知道为什么Player对象不会在这里被初始化。关于该怎么做/解释可能导致这种情况的任何建议?

谢谢, Mariogs

1 个答案:

答案 0 :(得分:7)

  

不知道为什么Player对象不会在这里初始化

这并不是很简单,因为你没有初始化它!

您已经覆盖了ActiveRecord :: Base初始化方法,但是您没有调用它,因此Player类未正确初始化

只需致电超级

class Player < ActiveRecord::Base
    attr_accessor :name, :rating, :team_name
    def initialize(name, rating, team_name)
        super
        @name = name
        @rating = rating
        @team_name = team_name
    end
end

你可能根本不打算覆盖初始化方法,强烈反对http://blog.dalethatcher.com/2008/03/rails-dont-override-initialize-on.html,你可能想要使用after_initialize回调,这样你就可以将名称,等级和team_rating从params中分离出来传递给任何方法的哈希导致玩家模型首先被初始化