2010-01-19 149 views
0

我想讓用戶在網站上寫評論。如果他們是註冊用戶,他們的用戶名將與註釋一起顯示,否則允許他們鍵入顯示的名稱。Ruby on Rails - 可選關聯?

我打算在數據庫中創建一個默認匿名用戶,並將每個未註冊的評論鏈接到該用戶。有沒有更好的方法來做到這一點?

任何意見讚賞。

謝謝。

回答

1

我想你可以讓你的評論模型的user_id爲空,因爲你想允許非註冊用戶添加評論。至於增加的名字對於非註冊用戶而言,就表示該

選項1.兩個選項的註釋模型添加列,並將其命名一樣anonymous_user在這裏您將存儲非註冊用戶的姓名

選項2.創建另一個具有name和comment_id屬性的AnonymousCommentor模型。

如果你要分開使用匿名用戶其他的東西,以及從評論在您的應用程序,那麼你可以把它的遺傳多態性,使用合適的名稱,比如AnonymousUser而不是AnonymousCommentor

2

與創建一個匿名用戶的問題那麼你需要檢查一個評論是由「真實」的用戶做出的,還是在顯示名字時是匿名的,這會增加複雜性。另外,如果您有查看其個人資料頁面的方式(可能包括髮布歷史記錄),則需要排除具有例外情況的匿名用戶。

通常,最好在您的評論中有一列代表用戶的可見名稱,只顯示提供的名稱或其他註冊用戶的名稱。例如,您的視圖助手可能是這樣的:

class Comment < ActiveRecord::Base 
    belongs_to :user 

    def user_name 
    self.anonymous_name or (self.user and self.user.name) or 'Anonymous' 
    end 
end 

這將顯示註釋記錄,或用戶名的anonymous_name字段的內容,如果用戶被分配或「無名氏」作爲最後所努力展示一些東西。

有時,在處理大量註釋時,實際上會對大量數據庫進行反規範化處理,這樣您就不必通過連接加載用戶表來簡單地顯示名稱。用該用戶的名字填充這個字段,即使他們不是匿名的,也可以幫助解決這個問題,儘管這意味着當用戶名改變時這些值需要更新,假設甚至可能。