我正在尝试通过ID数组查找模型,如下所示:
Model.find [1,2,3]
但是假设其中只有两个模型(标识为2的模型已删除):
#<Model id: 1>
#<Model id: 3>
我收到这样的错误:
#<ActiveRecord::RecordNotFound: Couldn't find all Models with 'id': (1, 2, 3) (found 2 results, but was looking for 3).>
是否有可能捕获此错误并确定不存在哪些模型?
说我在我的控制器中:
def index
@models = Model.find params.require(:model_ids)
rescue ActiveRecord::RecordNotFound => e
e.full_message
???
end
我想在???
行中,对将返回e
的异常2
运行一些代码,让我知道未找到哪些模型,因此我可以重新运行查询没有它,同时指出找不到哪个。
错误的方法。当您希望代码引发.find
时,应使用ActiveRecord::RecordNotFound
查找特定记录。这样做是为了确保记录存在并避免出现零错误。通常,它用于触发404响应而不重复相同的样板:
def show
@record = Record.find_by(id: params[:id])
unless @record
render file: 'public/404.html', status: :not_found
end
end
如果您不想提高代码,请使用.find_by(id: id)
。
要获取多个记录,请在以下位置使用:
models = Model.where(id: [1,2,3])
如果要确定其中哪些ID不存在,请使用数组diff:
bad_ids = [1,2,3] - models.ids