Quando vamos procurar um objeto pelo ID, geralmente utilizamos o comando find, mas você já se perguntou porque não utilizar o find_by no lugar de find e qual a diferença entre os dois?

Supondo que temos a seguinte tabela:

# Table name: users
#
#  id        :integer          not null, primary key
#  name      :string(255)      not null

Se procurarmos por um ID que não exite, utilizando o comando find, isto é:

User.find(id_inexistente)

O retorno será:

ActiveRecord::RecordNotFound: Couldn't find User with 'id'=id_inexistente

Caso você não queira que retorne um Active Record, você pode utilizar o find_by, passando a coluna id, isto é:

User.find_by(id: id_inexistente)

Como não existe o id, ele irá retornar apenas nil.

Supondo que você está procurando um usuário e queira atribuir ele a uma variável, pode ser que o comando .find nem sempre seja um bom aliado, caso você não tenha um tratamento de erro para o active record.

Uma alternativa que você pode encontrar é utilizar o find_by no lugar de .find, tendo em vista que, caso não encontre, ele irá retornar nil no lugar.