如何在Rails中更改范围

时间:2017-11-03 04:58:57

标签: ruby-on-rails ruby

我正在开发一个旧的Rails项目,该项目在paranoia模型上使用Order,但它没有添加without_default_scope: true选项,因此我们的{{1}有一个默认范围:Order。我们在路线中有deleted_at IS NULL,因此当我尝试在resource :orders操作中访问已删除的订单ID时,它会尝试查找具有orders#show范围的订单,然后提升一个deleted_at IS NULL,像这样

ActiveRecord::RecordNotFound

我尝试用

覆盖Rails行为
Couldn't find Order with 'id'=217 [WHERE `orders`.`deleted_at` IS NULL]

但它仍然会引发相同的错误,因为它仍然使用默认范围,请注意错误消息以

结尾
  

[WHERE def show @order = Order.with_deleted.find(params[:id]) end orders IS NULL]

,似乎Rails在我之前表现得很好。如何在Rails之前找到订单?

更新
1.数据库中存在id = 217的订单,因为我可以在Rails控制台上通过deleted_at找到它。

问题已结束: 抱歉,我不知道我的应用程序控制器中有一个前置过滤器,它会根据控制器名称找到资源,我认为这是Rails的默认行为。

1 个答案:

答案 0 :(得分:0)

您可以尝试 unscoped

def show
  @order = Order.unscoped.find(params[:id])
end