2016-08-09 10 views
0

Railsは私のモデルの一つで、この関数を指して、私に上記のエラーを投げている:モデルのための私のテーブルの日時法:未定義のメソッド「<」nilのために:NilClass

def is_failed? 
    self.daily_post < (Time.now.utc.in_time_zone('Europe/London').beginning_of_day - 1.day) 
end 

daily_postです。最初は日付/日時の問題かもしれないと思っていましたが、それは修正されませんでした。

create_table "pledges", force: :cascade do |t| 
t.string "name" 
t.text  "description" 
t.integer "amount" 
t.integer "user_id" 
t.integer "category_id" 
t.datetime "created_at", null: false 
t.datetime "updated_at", null: false 
t.datetime "daily_post" 
t.integer "sponsor_id" 
t.index ["category_id"], name: "index_pledges_on_category_id", using: :btree 
t.index ["user_id"], name: "index_pledges_on_user_id", using: :btree 
end 

コントローラー:あなたの時間を事前に

def checkin 
@pledge = Pledge.find(params[:id]) 

if @pledge.is_failed? 
    ## pledge is over! 
    flash[:danger] = "Pledge failed!" 
else 
    @pledge.update(daily_post: Time.now.utc) 
    flash[:success] = "Checked in!" 
end 

redirect_to @pledge 
end 

感謝。

+0

daily_postメソッドを共有できますか?何とかnilを返します。 pryを使ってデバッグし、コンソールでself.daily_postを手動で呼び出してみてください。 –

+0

私は、私のポスト、Subhashにもっと詳細を入れました。お返事をありがとうございます。 –

+3

'self.daily_post'という文はこの場合は' nil'を返し、Rubyは未定義のメソッドである 'nil'に対して' <'を呼び出そうとします。 'self.daily_post'が' nil'のときにはtrueかfalseを返す必要があります。 – MrYoshiji

答えて

0

はこれを試してください:あなたの答えに

def is_failed? 
    self.daily_post.nil? || 
    self.daily_post < (Time.now.utc.in_time_zone('Europe/London').beginning_of_day - 1.day) 
end 
0

おかげで、私は解決策を作ることに成功しました。

モデルの新しいインスタンスを作成しているときに、daily_postに値が指定されていないという問題がありました。だから私はPledgeモデルにこれを加えました:

def first_checkin 
    if self.daily_post == nil 
     self.daily_post = self.created_at 
    end 
    end 

もう一度ありがとう!

関連する問題