Rails ActiveRecord 查找 id 数组,但有些未找到

god*_*yan 3 postgresql activerecord ruby-on-rails ruby-on-rails-5

我正在尝试通过像这样的 id 数组来查找模型:

Model.find [1,2,3]
Run Code Online (Sandbox Code Playgroud)

但是假设只有两个模型存在(删除了 id 为 2 的模型):

#<Model id: 1>
#<Model id: 3>
Run Code Online (Sandbox Code Playgroud)

我收到这样的错误:

#<ActiveRecord::RecordNotFound: Couldn't find all Models with 'id': (1, 2, 3) (found 2 results, but was looking for 3).>
Run Code Online (Sandbox Code Playgroud)

是否可以捕获此错误并确定哪些模型不存在?

说我在我的控制器中:

def index
  @models = Model.find params.require(:model_ids)
rescue ActiveRecord::RecordNotFound => e
  e.full_message
  ???
end
Run Code Online (Sandbox Code Playgroud)

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

max*_*max 7

错误的方法。.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
Run Code Online (Sandbox Code Playgroud)

.find_by(id: id)如果您不想提升代码,请使用。

要获取多条记录,请使用 where:

models = Model.where(id: [1,2,3])
Run Code Online (Sandbox Code Playgroud)

如果您想确定哪些 id 不存在,请使用数组差异:

bad_ids = [1,2,3] - models.ids
Run Code Online (Sandbox Code Playgroud)