我创建了一个如下所示的模型:
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并看到它将值分配给实例变量,但它没有初始化对象或创建它。
答案 0 :(得分:3)
您正在覆盖ActiveRecord
initialize
方法。这可能会导致问题 - 特别是如果你改变了界面(就像你一样)。
更好的方法是使用after_initialize
callback设置默认值。
或者,如果您坚持定义自己的initialize
,请务必使用ActiveRecord
致电super
。
答案 1 :(得分:2)
对于Active Record对象,您通常不应覆盖initialize
。此外,活动记录属性不存储在单个实例变量中,因此将所有这些实例变量设置为零不会实现任何操作