我是新来的铁路。只是想知道如果找不到 subject_id 会返回 nil 的更好方法是什么:
@subject = Subject.find_by_id(params[:subject_id])
或者
@subject = Subject.where(:id => params[:subject_id]).first
谢谢。
我是新来的铁路。只是想知道如果找不到 subject_id 会返回 nil 的更好方法是什么:
@subject = Subject.find_by_id(params[:subject_id])
或者
@subject = Subject.where(:id => params[:subject_id]).first
谢谢。
我更喜欢find_by
名称是描述性的,并且您无需调用第二个函数即可获得对象(即first
)
User.find(9) # returns User object. Throws exception when not found.
User.find_by(id: 9) # returns User object. Returns nil when not found.
User.where(id: 9).first # returns User object. Returns nil when not found.
它们都生成相同的 SQL 语句:
1.9.3p194 :003 > Example.find_by_id(9)
Example Load (0.3ms) SELECT "examples".* FROM "examples" WHERE "examples"."id" = 9 LIMIT 1
nil
1.9.3p194 :004 > Example.where(:id => 9).first
Example Load (0.3ms) SELECT "examples".* FROM "examples" WHERE "examples"."id" = 9 LIMIT 1
nil
因此它们在数据库中将具有相同的性能特征。find_by_*_
vs.的 Rails 代码可能略有不同where
,但我想这与查询时间相比可以忽略不计。
编辑:鉴于Ryan Bigg 在下面的评论,我不得不建议第二种形式以实现前向兼容性。