ruby-on-rails - find_by_id(params [首先是:subject_id]) vs where(:id => params[:subject_id]).

标签 ruby-on-rails ruby-on-rails-3.2

我是新手。只是想知道哪种方法更好,如果找不到subject_id,它将返回nil:

@subject = Subject.find_by_id(params[:subject_id])

或者
@subject = Subject.where(:id => params[:subject_id]).first

谢谢。

最佳答案

它们都生成相同的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_*_where的Rails代码可能略有不同,但是我想与查询时间相比,这可以忽略不计。

编辑:鉴于Ryan Bigg's comment below,我不得不建议第二种形式以实现前向兼容性。

关于ruby-on-rails - find_by_id(params [首先是:subject_id]) vs where(:id => params[:subject_id]).,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11199043/

相关文章:

ruby-on-rails - "bundler: command not found: unicorn"在将 Heroku Bamboo 告知的 Procfile 添加到 Cedar 迁移指南之后

ruby-on-rails - 如何使用 Nokogiri 返回一个 JSON 对象

ruby-on-rails - 在生成模型时指定限制的语法

javascript - 热从 .js.erb 文件获取 I18.locale?

ruby-on-rails - 使用 simple_form 限制表单的长度?

ruby-on-rails - 从 Backbone 检索 rails/devise current_user

ruby-on-rails - 教 Rails 3 与 Amazon Redshift 对话 - 设置参数 "client_min_messages"的权限被拒绝

jquery - 如果 Rails 中的 text_field_tag 表单助手被禁用,它不会提交吗?

ruby - 从类返回实例变量的值有问题

ruby-on-rails - bundler ,gems---根据要求从新版本更改