我創建了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
如何設置主鍵?原因只是我已經填充了朋友db,但我總是可以重新填充它。你能建議如何將uid設置爲主鍵嗎? – 2013-02-26 01:09:33
我建議你改變你的模型如何工作,而不是改變rails默認值。這種方式更容易。使用id作爲外鍵有什麼問題? – jvnill 2013-02-26 01:25:08