2012-03-05 11 views
0

EDIT:時間計算をコールバックとしてモデルに移動しました。私はこのエラーを取得しています:時間分の整数をキャプチャしてdatetimeとしてデータベースに保存する必要があります

NoMethodError in OutstandingsController#create 
undefined method `hours' for nil:NilClass 

は、私は、時間の数学を行うことができるように含める必要があるいくつかの宝石はありますか?私はそれがActiveSupportに含まれていると思った..?

class Outstanding < ActiveRecord::Base 
    belongs_to :user 

    before_validation(:on => :create) do 
    self.panic_deadline = Time.now 
    self.panic_deadline = self.panic_deadline + self.deadline_hours.hours 
    self.panic_deadline = self.panic_deadline + self.deadline_minutes.minutes 

    self.active = true 
    end 
end 

class OutstandingsController < ApplicationController 

def create 
    @outstanding = Outstanding.new(params[:outstanding]) 
    @user = current_user 
    @[email protected] 

    respond_to do |format| 
     if @outstanding.save ... 

<%= form_for(@outstanding) do |f| %> 
    <div class="field"> 
    <%= select_tag :deadline_hours, options_for_select(Array(0..99), 0) %><%= f.label :deadline_hours %> 
    <%= select_tag :deadline_mins, options_for_select(Array(1..59), 30) %><%= f.label :deadline_mins %> 
    </div> 
    <div class="actions"> 
    <%= f.submit %> 
    </div> 
<% end %> 

答えて

0

たぶん

panic_deadline = Time.now 
panic_deadline = panic_deadline + @outstanding.deadline_hours.hours 
panic_deadline = panic_deadline + @outstanding.deadline_minutes.minutes 

のようなものがありdeadline_hours/deadline_minutesの仮想属性のいずれかであるか、それはモデルスキーマ中だということを確認してください。

class Outstanding < ACtiveRecord::Base 
    belongs_to :user 

    before_validation(:on => :create) do 
    self.panic_deadline = Time.now 
    self.panic_deadline = self.panic_deadline + self.deadline_hours.hours 
    self.panic_deadline = self.panic_deadline + self.deadline_minutes.minutes 
    self.active = true 
    end 

    attr_accessor   :deadline_hours, :deadline_minutes 

end 
+0

私はコールバックでこれを試しました。上記を参照。 –

+0

うまくいきましたか?あなたはif!self.deadline_hours.blankを入れる必要があるでしょうか? if!self.deadline_minutes.blank?コールバック – Pasted

+0

に私のdeadline_hoursが空白の場合、私は '未定義のメソッド "時間"を得るだろうか? –

0

Ruby docs for Time

time = Time.now 
time += (60 * 60) # Time is now 1 hour from now 

に示すように、あなたは私が私の数学が正しいと思う時間のオブジェクトの上に計算を実行することができます:P

+0

申し訳ありませんが、これが役に立たなかった場合は、もう一度質問を読んで、基本的にこれを行うことを実現しました。 –

0

これは、あなたが何をしたいことがあります

@outstanding.deadline_hours.hours.since(@outstanding.deadline_mins.minutes.from_now) 

そして、あなたは、コールバックやオブザーバーでこれを計算する必要があります。

関連する問題