Ruby on rails活动记录选择返回始终为id

时间:2016-03-14 00:44:09

标签: ruby-on-rails select activerecord

在我的示例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。

3 个答案:

答案 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应始终为唯一值,因此无需使用wherefirst的组合来获取您要查找的单个记录。

ALSO

根据您的示例,我假设您的@user变量是您创建的对象,而不是User模型的实例,这就是您访问{{1}的原因而不只是user_id

但是,如果 是您的id模型的实例,那么请记住两件事:

  1. 您需要访问User,而不是id - 而且您也无需通过user_id访问它。你可以@user[:id]
  2. 你根本不需要找到记录。如果您已经拥有@user.id对象,那么您可以从对象本身获取User - 即find

答案 2 :(得分:1)

如果您已经拥有了您关心的用户的实例,并且IP字段不是连接到另一个表,那么只需将其从实例中拉出。

@ip = @user.ip

回到数据库获取您已有的信息没有任何好处。