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

时间:2012-09-03 07:03:29

标签: ruby-on-rails dynamic routing controller nested

我正在努力实施董事会。

现在我有BoardsController和PostsController。

默认情况下,帖子由电路板嵌套。

我希望所有董事会的帖子列表都有使用相同PostsController

的特殊路线

所以我在路线上做了这个.rb

resources :notice, :controller => "posts", :board_id => 1
resources :faq, :controller => "posts", :board_id => 2
resources :qna, :controller => "posts", :board_id => 3

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

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

posts_controller
def create @post = Board.find(params[:board_id]).posts.build(params[:post])

    if @post.save
        redirect_to board_posts_path(@post.board_id)
    else
        render 'new'
    end
end

if @post.save redirect_to board_posts_path(@post.board_id) else render 'new' end end

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

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

因为

这不是我想要的。

我可以使用if语句处理这个问题,但它似乎很乱。

有没有适当的解决方案?

1 个答案:

答案 0 :(得分:0)

您可以使用控制器上的self.send按帖子类型动态解析路径。假设你在字符串中有所创建帖子的类型(如果注意< Post以及你是否使用单表继承,我不明白你的问题):

post_type = # Get the specific post type ( "notice, faq ...")
redirect_to self.send("#{post_type}_path", @post.board_id)