我需要消除这个过程中的一个步骤。
我首先使用“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并获得正确的结果而不是错误?我怀疑这与延迟加载有关,但我不能确定。我知道它与关系周围的括号有关。我想摆脱“采摘”步骤。
答案 0 :(得分:1)
尝试使用:
@facebook_profile = FacebookProfile.where(:facebook_id => session[:facebook_profile_id]).first
然后您可以直接使用@facebook_profile.id
。
#first
调用实际执行where()
关系描述的查询,限制为1,并返回匹配的记录(如果有)。
答案 1 :(得分:1)
从错误中可以看出,where
不会返回单个对象,而是返回符合您指定条件的可枚举对象集合。这就是对象上不存在id
方法的原因。
您可以将.first
追加到@facebook_profile = FacebookProfile.where(:facebook_id => session[:facebook_profile_id])
的末尾,以达到您想要的效果。