Rails ActiveRecord可以找到id的数组,但有些没有找到



我正试图通过一系列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

我想在???行中,对将返回2的异常e运行一些代码,让我知道哪些模型没有找到,这样我就可以在没有它的情况下重新运行查询,同时注意哪些模型没有发现。

错误的方法。当您希望代码引发ActiveRecord::RecordNotFound时,应该使用.find来查找特定记录。这样做是为了确保记录存在并避免零错误。通常,这用于触发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不存在,请使用数组diff:

bad_ids = [1,2,3] - models.ids