0

我有一个问题, 我想更新我的数据库的“活动”列。 我的架构=在rails中更新数据库列

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

我想一次让一定时期后的应用程序来更新我的轨道活跃属性说从created_at ?? 2天

我曾尝试一些东西,像这样从控制器,但没有这对我有效.. 任何人都可以帮忙吗?

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 

,但是当我看到我的数据库没有任何改变... plz帮助

+1

设置'@aim.active = 1'并保存 –

+0

默认值为1 –

+0

,你希望它设置成'0'? –

回答

0

我想通了..愚蠢的铁轨

伙计们这是铁路最愚蠢的事情...... 它只是p关键字'活跃'的关键字 我将活动状态的列名更改为状态,现在它可以正常工作.. damm it !!!我浪费在这个时间:/

2

后,要真正更新列一定的时间,一种方法是运行一个cron脚本。该脚本可以每天运行以检查该表并更新active字段,该字段在created_at日期后两天未设置为活动状态。

+0

问题是他无法保存 –

+0

香农..以及我怎么可以实现一个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

是的我试过了,结果出来TIme.now == futuredate失败 –

+0

我该如何解决这个问题 –

+0

检查'Time.now> = futuredate' –