ユーザーと友達の2つのモデルを作成しました。ユーザーhas_manyfriendsおよびfriendbelong_toUsers。
どちらのモデルでも、foreign_keyを手動で=uidに設定しました。したがって、current_user.friendsを検索すると、friend.uid=current_user.uidを持つすべての友達が一覧表示されるはずです。ただし、そうではありません。
それは私のcurrent_userの定義と関係があるのではないかと思います。
current_userの私の定義は、私のsessions_helperに次のようにあります。
def current_user
@current_user ||= User.find(session[:user_id]) if session[:user_id]
end
セッション[:user_id]に注意してください。個人的にサインインすると、user_idは1になります。
ホームビューをプルすると、空白の配列が返されることに気付き<%= current_user.friends>
ました。これは奇妙なことです。SQLiteデータベースで、現在1人のユーザーがいて、そのuidが12345で、friendsモデルに100を超えるエントリがあることがわかります。 uidも=12345です。したがって、100を超える友達の配列を期待しています。サーバーのログを調べると、次のように表示されます。
SELECT "users".* FROM "users" WHERE "users"."id" =? LIMIT 1 <-[0m [['id',1]]
SELECT "friends".* FROM "friends" WHERE "friends"."uid" =1 LIMIT 30 offset 0
これは、friends.uid=1を探していることに注意してください。セッション[:user_id]に関連付けられていると思いますが、両方のテーブルで特にasをforeign_keyとしてcurrent_user.uid
関連付けているにもかかわらず、なぜそれが検索されないのか理解できません。uid
私は何が間違っているのですか?
ユーザーモデル:
class User < ActiveRecord::Base
attr_accessible :name, :provider, :uid
has_many :friends, :foreign_key => "uid"
フレンドモデル
class Friend < ActiveRecord::Base
attr_accessible :friendid, :name, :uid
belongs_to :user, :foreign_key => "uid"
Logininのセッションコントローラーでは、OMNIAUTHを使用し、session[:user_id] = user.id
関連する場合は次のように設定します。Sessions_controller:
def create
auth = request.env["omniauth.auth"]
user = User.find_by_provider_and_uid(auth["provider"], auth["uid"]) || User.create_with_omniauth(auth)
session[:user_id] = user.id
redirect_to root_url, :notice =>"Signed in!"
end