我创建了 2 个模型:用户和朋友。用户有_许多朋友和朋友属于_to 用户。
在这两个模型中,我手动将 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,并且朋友模型中有超过 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。我假设它与 session[:user_id] 相关联,但我不明白为什么它不寻找current_user.uid
尽管我uid
在两个表中专门关联为 foreign_key 。
我究竟做错了什么?
用户模型:
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"
请注意,在登录时在我的会话控制器中,我使用 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