我想根据:position_status
是否等于:position_date
更新模型中的Date.today
,假设我有:position_date
Mon, 26 Oct 2017
存储在数据库中,如果Date.today
在该特定日期,则更新:position_status
我尝试将position_date
更改为今天的日期以查看它是否会更新,但:position_date
未更新。
attr_accessor :update_position_status
def update_position_status
if Date.today == self.position_date
self.update_attribute(:position_status => 'Filled')
end
end
答案 0 :(得分:1)
是update_attribute
需要两个参数。
正确的语法是:
self.update_attribute(:position_status, 'Filled')
答案 1 :(得分:1)
update_attribute(name,value) http://api.rubyonrails.org/classes/ActiveRecord/Persistence.html#method-i-update_attribute
update_attribute
更新单个属性并跳过验证。 update_attributes
获取属性哈希值并执行验证。
所以更正的代码是:
def update_position_status!
update_attribute(position_status: 'Filled') if self.position_date.today?
end
名称应以!
结尾,因为它会改变(更改)对象。
然而,逐个更新记录并不是一个特别可扩展的解决方案。相反,您希望按日期选择所有记录并进行批量更新:
# MySQL
Thing.where("DATE(position_date)=CURDATE()")
.update_all(position_status: 'Filled')
# Postgres
Thing.where("date_trunc('day', position_date) = current_date()")
.update_all(position_status: 'Filled')