12

我正在尝试使用 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
4

3 回答 3

9

如果您使用的是 rails 3.2.1 及更高版本,则该方法的新名称为first_or_initialize. 它与 结合使用where。在您的情况下,由于您正在调用 save,因此您应该使用first_or_create,但如果您想手动调用save,只需替换该方法并在之后调用 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
于 2013-03-12T14:35:27.613 回答
9

我在这里读到 Rails 4,这是正确的语法:

Progress.find_or_initialize_by(chore_id: chore.id, period: period[chore.frequency], account_id: chore.account_id)
于 2014-11-19T23:08:34.417 回答
7

你可以试试:

MyModel.find_or_initialize_by_local_dt_and_comunity_id([:local_dt], vdays[:community_id])

附加列名_and_

于 2013-03-12T14:08:12.077 回答