我正在尝试使用ActiveRecord在我的数据库中插入数据。
当我使用pdays = MyModel.new
进行初始化而不是find_or_initialize_by
时,脚本运行正常。但它只运行一次。我需要每天运行以执行更新。当我第二次尝试使用pdays = MyModel.new
运行脚本时,不会引发重复的键约束。
因此我尝试使用2个参数进行下面的find_or_initialize_by,但这会产生错误:
未定义的方法`find_or_initialize_by'
2列一起构成唯一记录:
vertica_traffic.each do |vdays|
pdays = MyModel.find_or_initialize_by([:local_dt], vdays[:community_id])
pdays[:local_date] = vdays_traffic[:local_d]
pdays[:community_id] = vdays_traffic[:community_id]
pdays[:uniquesters] = vdays_traffic[:uniques]
pdays.save
end
答案 0 :(得分:9)
如果您使用的是rails 3.2.1及更高版本,则该方法的新名称为first_or_initialize
。它与where
一起使用。在您的情况下,由于您正在调用save,因此您应该使用first_or_create
,但如果您想手动调用save
,只需替换该方法并在
MyModel.where(local_date: vdays_traffic[:local_date], community_id: vdays_traffic[:community_id]).first_or_create do |record|
record.uniquesters = vdays_traffic[:uniques]
end
答案 1 :(得分:7)
I read here that in Rails 4,这是正确的语法:
Progress.find_or_initialize_by(chore_id: chore.id, period: period[chore.frequency], account_id: chore.account_id)
答案 2 :(得分:6)
你可以尝试:
MyModel.find_or_initialize_by_local_dt_and_comunity_id([:local_dt], vdays[:community_id])
使用_and_