Ruby on rails 如何将嵌套资源路由路由到另一个?
我正在制作执行板 现在我有了BoardsController和PostsController 默认情况下,柱由板嵌套 我希望所有董事会的职位名单有他们的特殊路线使用相同的PostsController 所以我在route.rb中做了这个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=
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)