我需要从查询结果中获取用户ID

时间:2019-01-19 19:32:33

标签: ruby database ruby-on-rails-3 relational-database

am使用用户名从我的用户表中进行查询,如何从查询对象中获取用户ID User.where(user_name:“ john”)

我的目标是获取用户ID:5,我认为它与(.id)一样简单,但这没用

=> #<ActiveRecord::Relation [#<User id: 5, user_name: "john", user_city: "India", created_at: "2019-01-19 18:02:32", updated_at: "2019-01-19 18:02:32">]> 

2 个答案:

答案 0 :(得分:4)

经过材料化的where将返回一个集合,因此您可以使用.first获得第一条记录

User.where(:user_name => "john").first&.id

或使用find_by返回满足条件的第一条记录。

User.find_by(:user_name => "john")&.id

答案 1 :(得分:0)

如果您实际上只是在尝试获取ID(即不使用对象的任何其他属性),通常最好将其表述为.pluck。这需要less time for ActiveRecord进行实例化,并使查询作业更好地利用您的数据库索引。只要User#user_name是唯一的(我希望如此!),它将返回长度为1的数组。

User.where(user_name: "John").first.&id 
   # SELECT "users".* FROM "users" WHERE "users"."user_name" = "John" 
   # ORDER BY "users" ASC LIMIT 1
   # => 1 or nil

User.where(user_name: "John").pluck(:id).first
   # SELECT "users"."id" FROM "users" WHERE "users"."user_name" = "John"
   # => 1 or nil

不幸的是,find_by及其助手没有与pluck一起工作,而这两个语句均导致错误

User.find_by(user_name: "John").pluck(:id)
User.find_by_user_name("John").pluck(:id)