Rails模型方法失败

时间:2012-01-17 22:34:14

标签: ruby-on-rails ruby-on-rails-3 activerecord model

我的模型中有以下代码:

attr_accessor :display_time_reader
attr_reader :display_time_reader

使用以下display_time_reader = method:

def display_time_reader=(days_before_start)
   self.date_to_show_ad=self.start_time-days_before_start.to_i.days
end

我正在使用以下参数提交:

Parameters: {"utf8"=>"✓", "authenticity_token"=>"wb7acGREdNH2aeuYjye51wwaWdMXgTYvAcNxoDR9HAE=", "sale"=>{"start_time(3i)"=>"13", "start_time(2i)"=>"1", "start_time(1i)"=>"2012", "start_time(4i)"=>"23", "start_time(5i)"=>"00", "end_time(3i)"=>"14", "end_time(2i)"=>"1", "end_time(1i)"=>"2012", "end_time(4i)"=>"01", "end_time(5i)"=>"00", "display_time_reader"=>"7"}, "commit"=>"create"}

但是我收到以下错误:

  

当你没想到它时,你有一个零对象!你可能有   期待一个Array的实例。评估时发生错误   零.-

控制器代码:

def new
  user = User.find(current_user.id)
  @sale = user.sales.build
  @locations = user.locations
  1.times { @sale.items.build; @sale.build_location }
end

def create
 @sale = Sale.new(params[:sale])
 @sale.user_id = current_user.id

 logger.debug "Sale object!!!  #{@sale.inspect}"
 respond_to do |format|
   if @sale.save
     format.html { redirect_to @sale, notice: 'Sale was successfully created.' }
     format.json { render json: @sale, status: :created, location: @sale }
   else
     format.html { render action: "new" }
     format.json { render json: @sale.errors, status: :unprocessable_entity }
   end
  end
end

任何可能导致此问题的想法?

2 个答案:

答案 0 :(得分:0)

看起来self.start_time可能是nil(因此调用方法-未定义)。你能保证self.start_time不是nil吗?

答案 1 :(得分:0)

看起来在尝试减去值之前未设置初始化程序的哈希条目,因此发生了零错误。通过使用before_save回调来解决此问题,因为这样可以保证每次保存记录时都会计算正确的start_time。