yel*_*ign 5 mysql hash activerecord ruby-on-rails
我遇到的问题应该很容易,但我不知道我做错了什么.我只是尝试执行一个返回单个字段的查询,而不是Rails 3中的完整记录.
模型方法
def self.find_user_username(user_id)
user_name = User.select("user_name").where(user_id)
return user_name
end
Run Code Online (Sandbox Code Playgroud)
我正盯着Rails指南(http://guides.rubyonrails.org/active_record_querying.html#selecting-specific-fields),它简单地说(其中viewable_by,locked = fields):
Client.select("viewable_by, locked")
Run Code Online (Sandbox Code Playgroud)
我试过翻转选择,就像这样:
User.select("user_name").where(user_id) - AND -
User.where(user_id).select("user_name")
Run Code Online (Sandbox Code Playgroud)
但都没有工作.事实上,我甚至尝试过:
user_name = User.select("yoda").where(user_id)
Run Code Online (Sandbox Code Playgroud)
我没有得到错误.当我查看视图时,我在哪里:
Friend.find_user_username(friend.user_id)
Run Code Online (Sandbox Code Playgroud)
我只是不断得到哈希:ActiveRecord :: Relation:0x2f4942f0
Ald*_*uca 22
User.where(:id => user_id).pluck(:user_name).first
Run Code Online (Sandbox Code Playgroud)
应该做你想做的事.
pluck "接受列名作为参数,并返回指定列的值数组以及相应的数据类型"
Ald*_*uca -3
顺便说一句,如果问题是关于 ActiveRecord::Relation 的,那么它是由 where 和 select 返回的对象的类,正如您正在阅读的 Rails 指南中所述。它经过优化,可在多个方法之间链接,并且当您实际访问关联的元素时,您将获得模型对象(因此在幕后,SQL 查询仅运行一次)。这意味着您获得了 Relation 对象,因为您只需返回它。
在这种情况下,也许最好的解决方案就是使用 find 并访问 user_name 属性
def self.find_user_username(user_id)
User.find(user_id).user_name
end
Run Code Online (Sandbox Code Playgroud)
该查询将从数据库中获取所有其他属性,但您将仅返回用户名。