Jen*_*sky 3 ruby rake ruby-on-rails
我有简单的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'
Run Code Online (Sandbox Code Playgroud)
结束
错误是关于验证,例如:
rake aborted!
ActiveRecord::RecordInvalid: Validation failed: Expiration date must be after 2015-10-27
Run Code Online (Sandbox Code Playgroud)
脚本已停止,并且未添加有效记录.
将其包裹在开始/救援区块中.
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
Run Code Online (Sandbox Code Playgroud)
请注意,这是有效的,因为默认救援是针对StandardError的.自ActiveRecord :: RecordInvalid <StandardError.它将被"捕获".
如果您只想对这些特定错误执行某些操作,则可以先抢救特定错误.
(另请参阅API:http://ruby-doc.org/core-2.2.0/Exception.html)
归档时间: |
|
查看次数: |
1163 次 |
最近记录: |