我遇到了有關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文件中取出。
因此,在我的主題控制器,當我創建,我在哪裏設置其用戶?我是否會做一個before_filter,並且有一個方法會變爲'@user = current_user',並在創建新主題時保存用戶?或者我需要編輯創建方法? – a3uge 2011-04-06 13:38:58
我認爲我必須做類似... @topic = section.current_user.topics.build(params [:topic])...但顯然不起作用,因爲current_user不是section的屬性。 – a3uge 2011-04-06 13:48:25
current_user是Devise的助手。如果沒有用戶登錄,並且用戶對象(如果用戶已登錄),則爲零。在您之前的過濾器中,您需要如下所示:before_filter:authenticate_user !,:except => [:index]。這需要登錄此控制器的所有方法(索引除外)。看看我的鏈接(和本教程的其他章節)。 – 2011-04-06 15:04:49