我正在开发一个旧的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的默认行为。
答案 0 :(得分:0)
您可以尝试 unscoped
def show
@order = Order.unscoped.find(params[:id])
end