rails/mysql - 我如何消除 ActiveRecord::StatementInvalid 错误?
Posted
技术标签:
【中文标题】rails/mysql - 我如何消除 ActiveRecord::StatementInvalid 错误?【英文标题】:rails/mysql - how do i silence out ActiveRecord::StatementInvalid error? 【发布时间】:2010-03-11 09:40:23 【问题描述】:我正在编写一个代码来处理已读/未读消息,并使用一个简单的 user_id/message_id mysql 表来处理已读/未读状态。
当用户查看消息时,我执行
Reading.create(:user_id => uid, :message_id => mid)
user_id/message_id 字段组合有唯一索引,所以当 Readings 中的条目已经存在时,我收到 ActiveRecord::StatementInvalid 关于重复条目的错误。
现在我可以添加
unless Reading.exists?(:user_id => uid, :message_id => mid)
Reading.create(:user_id => uid, :message_id => mid)
end
但我想这会在 INSERT 之前增加一个 SELECT 查询
我宁愿只有一个 INSERT,即使它失败也不会报告错误(我想 REPLACE 会是最好的,但 afaik 它在 ActiveRecord 中不可用)。
【问题讨论】:
【参考方案1】:拯救它
begin
Reading.create(:user_id => uid, :message_id => mid)
rescue ActiveRecord::StatementInvalid => error
raise error unless error.to_s =~ /Mysql::Error: Duplicate/
end
这有点难看,但会起作用。考虑收紧正则表达式,除非准确匹配您遇到的错误类型。
【讨论】:
以上是关于rails/mysql - 我如何消除 ActiveRecord::StatementInvalid 错误?的主要内容,如果未能解决你的问题,请参考以下文章
Rails 4.2 MySQL 5.6 Elastic Beanstalk YAML 语法错误
Rails:“Mysql2::Error: Incorrect string value:”尝试保存“params.inspect”时