Rails ActiveRecord 找到 id 数组,但有些没有找到
Rails ActiveRecord find array of ids, but some are not found
我正在尝试通过一组 ID 查找模型,如下所示:
Model.find [1,2,3]
但假设这些模型中只有两个存在(删除了 id 为 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
的代码 return 2
,让我知道哪些型号未找到,因此我可以在没有它的情况下重新运行查询,同时注意哪些未找到。
错误的方法。当您希望代码引发 ActiveRecord::RecordNotFound
时,应该使用 .find
来查找特定记录。这样做是为了确保记录存在并避免出现 nil 错误。通常这用于触发 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)
。
要获取多条记录,请使用 where:
models = Model.where(id: [1,2,3])
如果您想确定哪些 ID 不存在,请使用数组差异:
bad_ids = [1,2,3] - models.ids
我正在尝试通过一组 ID 查找模型,如下所示:
Model.find [1,2,3]
但假设这些模型中只有两个存在(删除了 id 为 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
的代码 return 2
,让我知道哪些型号未找到,因此我可以在没有它的情况下重新运行查询,同时注意哪些未找到。
错误的方法。当您希望代码引发 ActiveRecord::RecordNotFound
时,应该使用 .find
来查找特定记录。这样做是为了确保记录存在并避免出现 nil 错误。通常这用于触发 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)
。
要获取多条记录,请使用 where:
models = Model.where(id: [1,2,3])
如果您想确定哪些 ID 不存在,请使用数组差异:
bad_ids = [1,2,3] - models.ids