无法初始化新对象

时间:2013-08-25 20:31:48

标签: ruby-on-rails ruby model initialization

我创建了一个如下所示的模型:

class Stock < ActiveRecord::Base
  attr_accessible :company, :stock_ticker, :current_stock_price, :free_cash_flow, :num_shares, :PE_ratio, :dividend_per_share, :dividend_growth_rate, :beta, :cost_of_equity, :rate_of_return, :fcf_share_value, :capm_share_value, :dividend_share_value, :composite_share_value  

  def initialize(submitted_stock)
    @company = submitted_stock
    @stock_ticker = submitted_stock
    @current_stock_price = 0 
    @free_cash_flow = 0
    @num_shares = 0 
    @PE_ratio = 0
    @dividend_per_share = 0
    @dividend_growth_rate = 0
    @beta = 0
    @cost_of_equity = 0
    @rate_of_return = 0
    @fcf_share_value = 0
    @capm_share_value = 0
    @dividend_share_value = 0
    @composite_share_value = 0
  end
end

当我尝试创建新的Stock时:

s = Stock.new("MSFT")

没有创建新股票,相反,我收到以下回复:

#<Stock not initialized>

我使用Pry并看到它将值分配给实例变量,但它没有初始化对象或创建它。

2 个答案:

答案 0 :(得分:3)

您正在覆盖ActiveRecord initialize方法。这可能会导致问题 - 特别是如果你改变了界面(就像你一样)。

更好的方法是使用after_initialize callback设置默认值。

或者,如果您坚持定义自己的initialize,请务必使用ActiveRecord致电super

答案 1 :(得分:2)

对于Active Record对象,您通常不应覆盖initialize。此外,活动记录属性不存储在单个实例变量中,因此将所有这些实例变量设置为零不会实现任何操作

相关问题