在我的示例ruby应用程序中有类似的查询
@ip = User.where("id = ?",@user[:user_id]).select('ip').first
返回
{"id":null,"ip":"127.0.0.1"}
我不希望它返回id,虽然id为1,但它返回为null。
PS:它不会返回id:null如果我在select中提到id,如.select('id,ip')
有任何帮助吗?我想要只返回ip。
答案 0 :(得分:3)
您可能需要尝试使用pluck
,而这只会返回您想要的值。
ip = Model.where(conditions).pluck(:ip).first
答案 1 :(得分:2)
你误解了select
的作用。查看Ruby docs以更好地了解该方法的使用方式。
如果您要做的只是根据找到ip
的记录从User
模型返回id
属性,那么您只需要:
User.find(@user[:user_id]).ip
请注意,我使用的是find
而不是where
。由于id
应始终为唯一值,因此无需使用where
和first
的组合来获取您要查找的单个记录。
根据您的示例,我假设您的@user
变量是您创建的对象,而不是User
模型的实例,这就是您访问{{1}的原因而不只是user_id
。
但是,如果 是您的id
模型的实例,那么请记住两件事:
User
,而不是id
- 而且您也无需通过user_id
访问它。你可以@user[:id]
。@user.id
对象,那么您可以从对象本身获取User
- 即find
。答案 2 :(得分:1)
如果您已经拥有了您关心的用户的实例,并且IP字段不是连接到另一个表,那么只需将其从实例中拉出。
@ip = @user.ip
回到数据库获取您已有的信息没有任何好处。