2013-02-25 69 views
0

我創建了2個模型:用戶和朋友。用戶has_many朋友和朋友belongs_to用戶。手動關聯模型,Rails無法理解來自第二個模型的數據。爲什麼?

在這兩個模型中,我手動將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數據庫中看到當前有一個用戶,他的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。我假設它與會話[: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" 

注意,在我的會話控制器時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 

回答

0

對於任何遇到此問題的人。解決方案是在用戶模型中設置primary_key ='uid',並在朋友模型中設置foreign_key =>'uid'

0

w有問題w ith你的設置。這在用戶模式聲明

has_many :friends, :foreign_key => "uid" 

,匹配friends.uiduser.idfriends.uid是與用戶的主鍵(即id列)相匹配的外鍵。這也同樣在這裏,

belongs_to :user, :foreign_key => "uid" 

你需要,如果你想要這個工作設置的用戶uid主鍵。你有什麼理由要這樣做?

+0

如何設置主鍵?原因只是我已經填充了朋友db,但我總是可以重新填充它。你能建議如何將uid設置爲主鍵嗎? – 2013-02-26 01:09:33

+0

我建議你改變你的模型如何工作,而不是改變rails默認值。這種方式更容易。使用id作爲外鍵有什麼問題? – jvnill 2013-02-26 01:25:08

相關問題