我在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
答案 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中分离出来传递给任何方法的哈希导致玩家模型首先被初始化