若 id = 1 的资料不存在, find会引以一个 ActiveRecord::RecordNotFound,会在production环境引起一个404

报错

Order.find(1)     =>  Couldn't find Order with id = 1

Order.find_by_id(1)    => nil 

以下3种方法都可以找到 id=1

Order.find(1)
Order.find_by_id(1)
Order.where(id: 1).first or Order.where(id: 1)  

所以在设计购物车时,这样写

cart = Cart.find_by(id: session[:cart_id])

如果使用以下写法,打开首页就会报错

cart = Cart.find(session[:cart_id])

find_by 与 where

这2种写法是等价的, 都能找到第一笔资料

order = Order.find_by_token(“xxx”)
order = Order.where(:token => “xxx”).first

要同时查name 和 email

order = Order.find_by_name_and_email(“xxx”, “xxx@xxx.com”)
order = Order.where(:name => “xxx”,  :email => “xxx@xxx.com”).first

下面的写法可以用,但是不要用, code 会很难维护

Order.find_by_xxx_and_yyy_and_zzz_and…