2011-01-30 64 views
1

我有一個Forum,它有很多Topic s。我的路線如下:將父資源ID傳遞給表單中的創建操作

GET /forums/:forum_id/topics/new => Topics#new 
POST /topics      => Topics#create 

這是我的問題開始的地方:

= form_for @topic do |topic_form| 

這種形式映射到POST /topics路線。必須提供A forum_id才能保存主題。它可用於new操作,但我找不到任何方法將它傳遞給create操作。

我試過的路線更改爲:

GET /forums/:forum_id/topics/new => Topics#new 
POST /forums/:forum_id/topics  => Topics#create 

但現在forum_id結束了專題參數哈希外:

{ topic: { title: "Test" }, commit: "Create Topic", forum_id: 1 } 

我該如何解決這個問題?

回答

2

我認爲最合適的方法就是像你在第二個例子中那樣路由它。然後在創建動作中,您可以首先實例化論壇以確保其有效,然後從論壇創建主題。它可能是這個樣子:

def create 
    @forum = Forum.find(params[:forum_id]) 
    @topic = @forum.topics.new(params[:topic]) 
    if @topic.save 
    ... 
    else 
    ... 
    end 
end 

這是假設你的論壇模式的has_many:主題

+0

應該不就是'@topic = @ forum.topics.build(PARAMS [:專題])`,或者甚至使用`create`而不是`build`並跳過保存的調用? – 2011-01-30 03:40:53

相關問題