2016-08-09 2 views
0

Рельсы бросают мне вышеуказанную ошибку, указывая на эту функцию в одной из моих моделей:Неопределенный метод «<» для ноля: NilClass

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

daily_post является: метод DateTime в моей таблице для данной модели. Сначала я подумал, что это может быть проблема даты/времени, но это не исправить.

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, это как-то возвращает нуль. Попробуйте отладить его с помощью pry и вызовите self.daily_post вручную на консоли. –

+0

Я добавил несколько статей в свой пост, Субхаш. Спасибо за ваш ответ. –

+3

В этом случае утверждение 'self.daily_post' возвращает' nil', а затем Ruby пытается вызвать '<' on '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 

Еще раз спасибо!

Смежные вопросы