我有简单的rake文件。
它将数据从.xls
文件导入数据库。
但有些数据无效。然后数据无效停止执行脚本。
但是我想跳过这一行并尝试下一行。
我的部分代码:
data.each do |row|
username = row[0].slice!(0..2) + row[1].slice!(0..2) + rand(100).to_s
username.downcase
password = "pass1234"
User.create!(
email: row[2].downcase,
username: username,
first_name: row[0],
last_name: row[1],
expiration_date: row[3],
password: password,
password_confirmation: password)
p 'done'
端
错误与验证有关,例如:
rake aborted!
ActiveRecord::RecordInvalid: Validation failed: Expiration date must be after 2015-10-27
脚本已停止且未添加有效记录。
答案 0 :(得分:5)
将其包裹在开始/救援区。
data.each do |row|
begin
username = row[0].slice!(0..2) + row[1].slice!(0..2) + rand(100).to_s
username.downcase
password = "pass1234"
User.create!(
email: row[2].downcase,
username: username,
first_name: row[0],
last_name: row[1],
expiration_date: row[3],
password: password,
password_confirmation: password)
p 'done'
rescue => e
# log exception or ignore it.
end
end
请注意,这是有效的,因为默认救援是针对StandardError的。从ActiveRecord :: RecordInvalid< StandardError的。它将被捕获'
如果您只想对这些特定错误执行某些操作,则可以首先解决特定错误。
(供参考,参见API:http://ruby-doc.org/core-2.2.0/Exception.html)