2012-01-17 35 views
1

我有下面的代碼在我的模型:Rails的模型方法失敗

attr_accessor :display_time_reader 
attr_reader :display_time_reader 

具有以下display_time_reader =方法:

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

我提交給它具有以下PARAMS:

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的實例。而評估 nil.-發生錯誤

控制器代碼:

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 

任何想法可能會導致什麼呢?

+0

您提交給一個操作,而不是一個模型。什麼是零? – 2012-01-17 22:37:49

+0

@DaveNewton - 上面介紹的代碼在模型中。它沒有指定什麼是零。 – Elliot 2012-01-17 22:38:59

+0

我知道它是在一個模型中,但我們並不真正知道什麼時候發生零,在什麼情況下等等。 – 2012-01-17 22:40:25

回答

0

看起來像self.start_time可能是nil(因此調用方法-是未定義的)。你能保證self.start_time不是nil

+0

但參數表明,應該不是無? – Elliot 2012-01-17 22:40:46

+0

不,'self.start_time'是唯一的東西(在你迄今爲止顯示的任何東西中),它有調用它的減法方法。如果'self.start_time'爲零,那麼它不會有'-'方法。確保'self.start_time'被初始化,無論是在構造上還是在該方法中。 – 2012-01-17 23:23:34

0

看起來初始化器的哈希條目沒有在值試圖被減去之前設置,因此發生了一個零錯誤。通過使用before_save回調修復了這個問題,因爲這可以保證每次保存記錄時都會計算出正確的start_time。