Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/260.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 模型中不存在例外情况_Ruby On Rails_Ruby_Activerecord - Fatal编程技术网

Ruby on rails 模型中不存在例外情况

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月”等例外情况,在“截止日期”列中几乎没有条目。当我试图在模型中处理异常时,

我在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月”等例外情况,在“截止日期”列中几乎没有条目。当我试图在
模型
中处理异常时,它失败了,并且没有进入
救援
部分。我不知道为什么它不能捕获模型中的错误,为什么它不能在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月”会引发异常吗?