2011-04-06 74 views
2

我遇到了有關Rails 3和新routes.rb一般結構性問題讓我有點困惑。感謝您的幫助或指導。Rails 3嵌套用戶資源(設計)結構

我有一個嵌套資源的論壇應用程序。有部分,主題和答覆。在routes.rb中的結構是這樣的:

resources :sections do 
    resources :topics do 
    resources :replies 
    end 
end 

我section.rb:

has_many :topics 
    has_many :replies, :through => :topics 

我topic.rb:

belongs_to :section 
    has_many :replies 

我reply.rb:

belongs_to :topic 

這是奇妙的工作。現在,這是我困惑的地方。

我添加了一個使用Devise的用戶控制器,並有一個可用的用戶名登錄/註銷系統。我試圖將「current_user」與答覆和主題連接起來。我認爲我對如何修復這些模型有了一個好主意,但是我對route.rb文件中的操作感到困惑。

對於user.rb,我相信我需要添加「has_many:topics」和「has_many:回覆,:through =>:topics」。然後在我的主題中,我需要添加「belongs_to:user」。我相信reply.rb保持不變?

至於routes.rb我有點難住。如果我編輯路線並添加用戶,我會得到像sectionid/username/topicid /這樣的路徑,但我不一定需要在類似的路線中存儲用戶名。因此,我要將用戶嵌入部分和主題之間,或者我可以將用戶從routes.rb文件中取出。

回答

2

您可以讓用戶離開路徑。只需將devise_for:用戶放在路由之上,而不將其包含在資源塊中。

用戶有很多話題,並且有很多回復。主題和答覆都屬於用戶。

您的控制器需要更多更改。您需要添加一個before_filter來檢查用戶是否已通過身份驗證,並在大多數控制器方法中進行更改,以檢查用戶是否僅通過了身份驗證,但是也是經過授權的,例如,對於編輯查找,您可以執行current_user.replies ....你可以在這裏閱讀更多(我自己的網頁):http://www.communityguides.eu/articles/4

+0

因此,在我的主題控制器,當我創建,我在哪裏設置其用戶?我是否會做一個before_filter,並且有一個方法會變爲'@user = current_user',並在創建新主題時保存用戶?或者我需要編輯創建方法? – a3uge 2011-04-06 13:38:58

+0

我認爲我必須做類似... @topic = section.current_user.topics.build(params [:topic])...但顯然不起作用,因爲current_user不是section的屬性。 – a3uge 2011-04-06 13:48:25

+0

current_user是Devise的助手。如果沒有用戶登錄,並且用戶對象(如果用戶已登錄),則爲零。在您之前的過濾器中,您需要如下所示:before_filter:authenticate_user !,:except => [:index]。這需要登錄此控制器的所有方法(索引除外)。看看我的鏈接(和本教程的其他章節)。 – 2011-04-06 15:04:49