Rails ActiveRecord查找ID数组,但未找到ID

问题描述 投票:2回答:1

我正在尝试通过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运行一些代码,让我知道未找到哪些模型,因此我可以重新运行查询没有它,同时指出找不到哪个。

ruby-on-rails postgresql activerecord ruby-on-rails-5
1个回答
4
投票

错误的方法。当您希望代码引发.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
© www.soinside.com 2019 - 2024. All rights reserved.