0

У меня проблема, Я хочу обновить «активный» столбец моей базы данных. моя схема =Обновление столбца базы данных в rails

tablename(name:string , id:int , active:0 ,created_at) 

Я хочу, чтобы обновить активный атрибут в моих рельсах приложение по истечении определенного периода времени, скажем 2 дней с момента created_at

Я попробовал несколько вещей, как это от контроллера, но ни один из этого сработало для меня .. может кто-нибудь помочь?

def check_aim 
    @aim = Aim.find(1) 

    aimdays = @aim.day 
    futuredate = @aim.created_at+aimdays.days 
    if(Time.now == futuredate) 
    @aim.active = false # i have tried @aim.update_attribute(:active,1) also didn't word either 
    @aim.save 
    end 
    if @aim.save 
    saved 
    else 
    not saved 
    end 
end 
helper_method :check_aim 

вид класс

=debug check_aim 

это возвращает

saved 

, но когда я вижу свое ничего базы данных не изменилось ... плз помочь

+1

Установить '@aim.active = 1' и сохранить –

+0

значение по умолчанию - 1 –

+0

, и вы хотите установить его на '0'? –

ответ

0

Я понял это .. глупые рельсы

Ребята, это самая глупая вещь по рельсам ... это было не что иное, как p ключевое слово «active» изменено имя столбца от активного к статусу, и теперь оно работает fyn .. damm it !!! Я потратил несколько часов на это:/

2

Чтобы действительно обновить колонку после определенное количество времени, одним из способов было бы запустить скрипт cron. Сценарий может запускаться каждый день, чтобы проверить таблицу и обновить поля active, которые не настроены на активные через 2 дня после даты created_at.

+0

Проблема в том, что он не может сэкономить –

+0

Shannon .. ну как я могу реализовать cron scriipt и что иначе я могу сделать, если не Time.now == будущая дата? –

1

Существует вероятность того, что состояние Time.now == futuredate терпит неудачу, но все же @aim.save вернет вам true, так как он может быть сохранен без изменений.

Вы должны изменить его Time.now >= futuredate так, если пропускается active будет установлен 0

Вы можете перемещать puts операторы внутри блока и проверить, является ли он печатать что-то

def check_aim 
    @aim = Aim.find(1) 

    aimdays = @aim.day 
    futuredate = @aim.created_at + aimdays.days 
    if(Time.now >= futuredate) 
    @aim.active = 0 # i have tried @aim.update_attribute(:active,1) also didn't word either 
    if @aim.save 
     "saved" 
    else 
     "not saved" 
    end 
    end 
end 
+0

yes Я пробовал и результаты пришли, что TIme.now == futuredate не работает –

+0

как я могу исправить это –

+0

проверить для 'Time.now> = futuredate' –

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

  • Нет связанных вопросов^_^