使用SQL函数

时间:2015-10-28 14:42:51

标签: mysql ruby-on-rails ruby ruby-on-rails-4

在rails中,您是否能够通过评估SQL函数来更新记录的属性?

MySQL表

| time_started        | time_to_execute |
|---------------------------------------|
| 2015-10-28 14:13:58 |      NULL       |

我想做什么:

update table set time_to_execute = TIME_TO_SEC(TIMEDIFF(NOW(), time_started))

通过模型。

我尝试使用常见的属性更新方法无效。

c.update_attribute(:time_to_execute, 'TIME_TO_SEC(TIMEDIFF(NOW(), time_started))')
c.update({:time_to_execute => 'TIME_TO_SEC(TIMEDIFF(NOW(), time_started))'})

是否可以使用SQL函数更新ActiveRecord模型的属性?

我知道我可以完成执行任意SQL,或者计算两个DateTime ruby​​对象之间的差异,但我想知道这是否可以通过模型方法实现。

1 个答案:

答案 0 :(得分:3)

您可以使用c.class.where(id: c.id).update_all("time_to_execute = TIME_TO_SEC(TIMEDIFF(NOW(), time_started))") 执行此操作

c.class

请注意,您可以将c.class.connection.execute "update table set time_to_execute = TIME_TO_SEC(TIMEDIFF(NOW(), time_started)) WHERE id = #{ c.id }" 替换为模型的实际类名(当前未在答案中显示)。

显示原始SQL实现的更新

{{1}}