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">]>
答案 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)