2011-01-30 36 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

相关问题