在 Rails API 中获取未找到记录的原始 SQL 响应的一部分
Getting part of the raw SQL in Rails API response for not found records
我创建了一个 Rails 5 应用程序,其中 config.api_only
设置为 true,并实现了一个控制器操作,该操作删除了作用域模型中的记录 Message
问题是当我尝试要删除不存在的记录,ActiveRecord::RecordNotFound
异常消息包含范围内使用的 SQL 查询的一部分,可以不在异常消息中包含 SQL ?
型号代码:
class Message < ActiveRecord::Base
scope(:active) { where(active: true) }
end
控制器代码
class MessageController < ApplicationController
def delete
message = Message.active.find(params[:id])
begin
message.destroy
head :accepted # 202
rescue ActiveRecord::RecordNotFound => error
render json: { error: error.message }, status: 404
end
end
end
如果我发送错误的 ID,我希望得到下一个回复:
{
"error": "Couldn't find Message with 'id'=23444"
}
但是,我收到了这个错误:
{
"error": "Couldn't find Message with 'id'=23444 [WHERE \"message\".\"active\" = ]"
}
据我所知,没有配置可以更改 ActiveRecord::RecordNotFound
异常错误消息。您可以做的最好的事情是在没有范围的情况下获取消息,然后在执行销毁和 return 适当的错误消息之前检查它是否处于活动状态。
class MessageController < ApplicationController
def delete
message = Message.find(params[:id])
if message.active
message.destroy
head :accepted # 202
else
render json: { error: "Couldn't find Message with 'id'=#{params[:id]}" }, status: 404
end
rescue ActiveRecord::RecordNotFound => error
render json: { error: error.message }, status: 404
end
end
当您在错误消息中看到 SQL 部分时,我假设您的应用程序 运行 处于 'development' 模式。默认情况下,当 运行 处于 'production' 模式时,Rails 将不再包含该信息。
我创建了一个 Rails 5 应用程序,其中 config.api_only
设置为 true,并实现了一个控制器操作,该操作删除了作用域模型中的记录 Message
问题是当我尝试要删除不存在的记录,ActiveRecord::RecordNotFound
异常消息包含范围内使用的 SQL 查询的一部分,可以不在异常消息中包含 SQL ?
型号代码:
class Message < ActiveRecord::Base
scope(:active) { where(active: true) }
end
控制器代码
class MessageController < ApplicationController
def delete
message = Message.active.find(params[:id])
begin
message.destroy
head :accepted # 202
rescue ActiveRecord::RecordNotFound => error
render json: { error: error.message }, status: 404
end
end
end
如果我发送错误的 ID,我希望得到下一个回复:
{
"error": "Couldn't find Message with 'id'=23444"
}
但是,我收到了这个错误:
{
"error": "Couldn't find Message with 'id'=23444 [WHERE \"message\".\"active\" = ]"
}
据我所知,没有配置可以更改 ActiveRecord::RecordNotFound
异常错误消息。您可以做的最好的事情是在没有范围的情况下获取消息,然后在执行销毁和 return 适当的错误消息之前检查它是否处于活动状态。
class MessageController < ApplicationController
def delete
message = Message.find(params[:id])
if message.active
message.destroy
head :accepted # 202
else
render json: { error: "Couldn't find Message with 'id'=#{params[:id]}" }, status: 404
end
rescue ActiveRecord::RecordNotFound => error
render json: { error: error.message }, status: 404
end
end
当您在错误消息中看到 SQL 部分时,我假设您的应用程序 运行 处于 'development' 模式。默认情况下,当 运行 处于 'production' 模式时,Rails 将不再包含该信息。