findwherefind_by_id之间有什么区别?当你试图找到一个给定ID的用户时,它们都起作用.

推荐答案

区别在于它们在找到记录或未找到记录时返回的内容.考虑下面的例子:

>> User.create name: 'THE USER' # creates a user with id = 1
>> User.find(1) # returns the user
>> User.find_by_id(1) # returns the user
>> User.where(id: 1).first # returns the user

如您所见,可以使用这三种方法中的任何一种获取现有用户.使用where的最大区别在于,您可以链接命令(当然,无需先调用first)

让我们看看当你试图找到一个不存在的记录时

>> User.find(2) # raises an exception
>> User.find_by_id(2) # nil
>> User.where(id: 2).first # nil

所以在这里,很明显,当你用find搜索一条不存在的记录时,你会得到一个异常.这个例外是ActiveRecord::RecordNotFound,它在生产环境中呈现404.

希望这有帮助!

UPDATE

Rails 4对find_by使用以下语法

>> User.find_by(id: 1)  # returns nil if there's no user with an id of 1
>> User.find_by!(id: 1) # raises ActiveRecord::RecordNotFound when no record is found

Ruby-on-rails相关问答推荐

仅当未在带有ENV[';Dyno';]的Heroku问题上运行时才初始化Sidekiq Cron

Rails 6升级没有加载Mongoid,这是一个问题

RubyOnRail在测试环境中启动失败

Rails引擎importmap Uncaught ReferenceError:未定义tinymce

Rails:比枚举更惯用的排序/可比较列表方法?

Rails 创建自定义函数/方法以及存储位置

如何在测试期间为 Rails 应用程序启用 Rails.cache 会话对象

无效的单表继承类型:Rails

Rails Migration将字符串转换为整数?

Rails cron 与时俱进,设置环境

Rails ActiveRecord:验证单个属性

Rails:删除级联与依赖销毁

适合mysql比较的Ruby datetime

.increment vs += 1

Rails:进行不可逆转的迁移是不是很糟糕?

Rails 4模块的未初始化常量

:javascript haml 标签中的内联Ruby ?

Rails 4,Capistrano 3.0.0,无法加载这样的文件 - 部署

Heroku - 在浏览器中显示当前提交的哈希

Rails:如何在rails中使用dependent::destroy?