我正在编写代码来处理已读/未读消息,使用一个简单的 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 最好,但据我所知,它在 ActiveRecord 中不可用)。
最佳答案
拯救它
begin
Reading.create(:user_id => uid, :message_id => mid)
rescue ActiveRecord::StatementInvalid => error
raise error unless error.to_s =~ /Mysql::Error: Duplicate/
end
这有点难看,但会起作用。考虑收紧 unless 中的正则表达式以准确匹配您遇到的错误类型。
关于mysql - rails/mysql - 我如何消除 ActiveRecord::StatementInvalid 错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2423885/