Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 模型中的Rails更新属性_Ruby On Rails_Activerecord_Model_Update Attributes - Fatal编程技术网

Ruby on rails 模型中的Rails更新属性

Ruby on rails 模型中的Rails更新属性,ruby-on-rails,activerecord,model,update-attributes,Ruby On Rails,Activerecord,Model,Update Attributes,我想根据if:position\u date更新模型中的:position\u status,该日期等于日期。今天,假设我在数据库中存储了:position\u date,即2017年10月26日星期一,如果日期。今天在该特定日期,然后更新:位置\u状态 我已尝试将职位日期更改为今天日期,以查看是否会更新,但:职位日期未更新 attr_accessor :update_position_status def update_position_status if Date.today == se

我想根据if
:position\u date
更新模型中的
:position\u status
,该日期等于
日期。今天
,假设我在数据库中存储了
:position\u date
,即2017年10月26日星期一,如果
日期。今天
在该特定日期,然后更新
:位置\u状态

我已尝试将
职位日期
更改为今天日期,以查看是否会更新,但
:职位日期
未更新

attr_accessor :update_position_status

def update_position_status
 if Date.today == self.position_date
  self.update_attribute(:position_status => 'Filled')
 end
end

update\u属性
需要两个参数

正确的语法是:

self.update_attribute(:position_status, 'Filled')
更新_属性(名称、值)

update\u属性
更新单个属性并跳过验证<代码>更新属性获取属性哈希并执行验证

因此,正确的代码是:

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')

调用此方法时,您应该会收到一个错误,因为
update\u attribute
需要两个参数。您不应该在此处使用
attr\u访问器
attr\u accessor
用于为实例属性生成getter和setter方法,而不是方法可访问性。我曾尝试更改代码,但它不会自动更新
:position\u status
,即使我将日期更改为今天。自动是什么意思?您需要使用类似cron选项卡的调度程序,并每天运行它。