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呼び出しは、リレーションによって記述されたクエリを制限 1 で実際に実行し、where()一致したレコードがあればそれを返します。

于 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 に答える