0

我需要消除这个过程中的一个步骤。

我首先使用“where”来查找具有匹配 id 的配置文件

@facebook_profile = FacebookProfile.where(:facebook_id => session[:facebook_profile_id])

这会产生一个看起来像这样的对象(注意周围的方括号)

[#<FacebookProfile id: 94, etc.]

如果我做:

$ @facebook_profile.id

结果是

#<NoMethodError: undefined method `id' for #<ActiveRecord::Relation:0x007f919cb0b3c0>>

然后我使用 pluck 来生成一个不同的对象,但这需要我使用之前的关系 @facebook_profile。

@new_facebook_profile = FacebookProfile.find_by_my_column(@facebook_profile.pluck(:my_column))

这会产生一个没有方括号的关系:

#<FacebookProfile id: 94, etc.>

在这个对象上,我可以调用:

@new_facebook_profile.id

并得到我的正确结果

我怎样才能做到@facebook_profile.id 并获得正确的结果而不是错误?我怀疑这与延迟加载有关,但我不能确定。我知道这与关系周围的括号有关。我想摆脱“采摘”步骤。

4

2 回答 2

1

尝试使用:

@facebook_profile = FacebookProfile.where(:facebook_id => session[:facebook_profile_id]).first

然后就可以@facebook_profile.id直接使用了。

#first调用实际上执行了where()关系描述的查询,限制为 1,如果有匹配的记录,则返回。

于 2013-03-17T19:08:54.770 回答
1

正如您从错误中看到的,where不返回单个对象,而是返回符合您指定条件的对象的可枚举集合。这就是为什么您的id方法在对象上不存在的原因。

您可以追加.first到末尾@facebook_profile = FacebookProfile.where(:facebook_id => session[:facebook_profile_id])以达到您想要的结果。

于 2013-03-17T19:09:33.960 回答