Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/52.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 如何将嵌套资源路由路由到另一个?_Ruby On Rails_Dynamic_Routing_Controller_Nested - Fatal编程技术网

Ruby on rails 如何将嵌套资源路由路由到另一个?

Ruby on rails 如何将嵌套资源路由路由到另一个?,ruby-on-rails,dynamic,routing,controller,nested,Ruby On Rails,Dynamic,Routing,Controller,Nested,我正在制作执行板 现在我有了BoardsController和PostsController 默认情况下,柱由板嵌套 我希望所有董事会的职位名单有他们的特殊路线使用相同的PostsController 所以我在route.rb中做了这个 resources:notice,:controller=>posts,:board\u id=>1 资源:常见问题解答,:controller=>posts,:board\u id=>2 资源:qna,:controller=>posts,:board_id=

我正在制作执行板

现在我有了BoardsController和PostsController

默认情况下,柱由板嵌套

我希望所有董事会的职位名单有他们的特殊路线使用相同的PostsController

所以我在route.rb中做了这个
resources:notice,:controller=>posts,:board\u id=>1
资源:常见问题解答,:controller=>posts,:board\u id=>2
资源:qna,:controller=>posts,:board_id=>3

起初,它似乎奏效了。但我意识到了一个问题。 因为我在这些资源中使用了相同的“PostsController”

执行控制器操作时,与路径相关的代码相同

邮递员

def创建 @post=Board.find(params[:Board_id]).posts.build(params[:post])

当我转到localhost:3000/notice/new时,它工作正常

但当我提交新帖子时,controller重定向到localhost:3000/boards/1/posts/

因为
重定向到board\u posts\u路径(@post.board\u id)

这不是我想要的

我可以使用if语句来处理这个问题,但它看起来很混乱


是否有适当的解决方案?

您可以使用控制器上的
self.send
来动态解析post类型的路径。假设您有一个字符串中创建的post的类型(如果注意
请注意,send方法可能能够完全公开您的类,并且可以从提交任何board_id.或class方法的简单get请求调用它。
    if @post.save
        redirect_to board_posts_path(@post.board_id)
    else
        render 'new'
    end
end
post_type = # Get the specific post type ( "notice, faq ...")
redirect_to self.send("#{post_type}_path", @post.board_id)