Ruby on rails 模型中不存在例外情况
我在RubyonRails模型中编写了一个函数,如下所示Ruby on rails 模型中不存在例外情况,ruby-on-rails,ruby,activerecord,Ruby On Rails,Ruby,Activerecord,我在RubyonRails模型中编写了一个函数,如下所示 def sorted_exp begin exp.order("currently_active = true DESC, TO_DATE(to_date, 'MM-DD-YYYY') DESC") rescue exp.order("currently_active = true DESC") end end 但由于“2018年9月”等例外情况,在“截止日期”列中几乎没有条目。当我试图在模型中处理异常时,
def sorted_exp
begin
exp.order("currently_active = true DESC, TO_DATE(to_date, 'MM-DD-YYYY') DESC")
rescue
exp.order("currently_active = true DESC")
end
end
但由于“2018年9月”等例外情况,在“截止日期”列中几乎没有条目。当我试图在模型
中处理异常时,它失败了,并且没有进入救援
部分。我不知道为什么它不能捕获模型中的错误,为什么它不能在rescue部分返回查询
提出的例外情况如下:
PG::InvalidDatetimeFormat:错误:“MM”的值“se”无效
在
sorted_exp
方法中,未使用查询的输出。Rails实际上在使用调用值时执行对DB的调用。在这种情况下,此值可能正在其他函数中使用,并由此引发错误,指向此行:exp.order(“当前活动=真实描述,到日期(到日期,'MM-DD-YYYY')描述”)
我不确定您的具体用例,但在这个块中捕获异常的唯一方法是使用查询应该返回的值,比如计算返回的对象数(同样,这取决于您的用例)。
例如,以下查询会在
begin..rescue
块中引发错误:
begin
User.order("TO_DATE(users.created_at, 'MONTH-YYYY') DESC")
rescue
puts "In rescue block"
end
这会引发以下错误:
ActiveRecord::StatementInvalid:PG::UndefinedFunction:ERROR:截止日期的函数(没有时区的时间戳,未知)不存在
但是,当此查询的输出用于begin
块本身时,会捕获异常。例如:
begin
sorted_users = User.order("TO_DATE(users.created_at, 'MONTH-YYYY') DESC")
count = sorted_users.count
rescue
puts "In rescue block"
end
其输出为:
在救援区
这是因为查询实际上是在
begin
块本身执行的,因此被我们的rescue
块捕获。您确定值“2018年9月”会引发异常吗?