Ruby on rails “扔铁轨”;无效日期“;
我正在将一个csv文件导入pg数据库,并且遇到了这个在升级到Rails 5之前从未遇到的错误Ruby on rails “扔铁轨”;无效日期“;,ruby-on-rails,Ruby On Rails,我正在将一个csv文件导入pg数据库,并且遇到了这个在升级到Rails 5之前从未遇到的错误 def self.assign_from_row(row) member = Member.where(membership_id: row[:membership_id]).first_or_initialize member.assign_attributes row.to_hash.slice( :last_name, :first_name, :membership_id, :ema
def self.assign_from_row(row)
member = Member.where(membership_id: row[:membership_id]).first_or_initialize
member.assign_attributes row.to_hash.slice(
:last_name, :first_name, :membership_id, :email
).merge(
:birthday => row[4].nil? ? nil : DateTime.strptime(row[4], "%m/%d/%Y").strftime("%Y/%m/%d")
)
member
end
确切的错误是生日线。当我从中删除。合并到)时,一切正常。csv标题如下所示:
"Last Name","First Name","Membership Id","E-mail","Birthday"
"Aber","Barbara","00591 2","bab@example.com","07/05/2015"
这些行如下所示:
"Last Name","First Name","Membership Id","E-mail","Birthday"
"Aber","Barbara","00591 2","bab@example.com","07/05/2015"
我也试过这句话
:birthday => DateTime.strptime("%m/%d/%Y").strftime("%Y/%m/%d")
我认为问题在于,许多生日都填充了“”,或者是零,我不知道如何告诉数据库在需要日期格式时插入零。如果日期转换失败,您可以援救nil
:birthday => (DateTime.strptime(row[4], "%m/%d/%Y").strftime("%Y/%m/%d") rescue nil)
通常不建议使用联机救援,因为它可以掩盖其他引发的异常(例如,如果您意外地键入了
DateTim
而不是DateTime
,则不会发现问题),但如果小心使用,联机救援是一个有用的工具。如果日期转换失败,您可以援救nil
:birthday => (DateTime.strptime(row[4], "%m/%d/%Y").strftime("%Y/%m/%d") rescue nil)
通常不建议使用在线救援,因为它可以掩盖其他引发的异常(例如,如果您意外键入了
DateTim
而不是DateTime
,您将无法发现问题),但使用时要小心,在线救援是一个有用的工具。我不得不回到原始csv,在Office Calc中打开它,并将包含日期的单元格更改为字符串。我首先将列更改为一个数字,然后是一个日期,其格式与sql格式“2015-02-23”相匹配,并且导入得很好。谢谢大家!
因此,这不是Rails的问题,而是对专栏的错误识别。事实上,我必须在加州大学里经历一些考验才能做到这一点。我必须先将列更改为数字,然后更改为日期。我必须返回到原始csv,在Office Calc中打开它,并将包含日期的单元格更改为字符串。我首先将列更改为一个数字,然后是一个日期,其格式与sql格式“2015-02-23”相匹配,并且导入得很好。谢谢大家!
因此,这不是Rails的问题,而是对专栏的错误识别。事实上,我必须在加州大学里经历一些考验才能做到这一点。我必须先将列更改为数字,然后更改为日期。请包含准确的错误。此外,将CSV向下修剪为导致错误的一行,并包括该CSV行。如果你能把它归结为一个令人不快的专栏,那就更好了。另外,Rails 5提交可能与此有关:请包含确切的错误。此外,将CSV向下修剪为导致错误的一行,并包括该CSV行。如果你能把它归结为一个令人不快的专栏,那就更好了。此外,Rails 5提交可能与此有关: