0

我正在实施董事会。

现在我有 BoardsController 和 PostsController。

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

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

所以我在 route.rb 中做了这个

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

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

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

喜欢,

post_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

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

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

因为 redirect_to board_posts_path(@post.board_id)

这不是我想要的。

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

有什么适当的解决方案吗?

4

1 回答 1

0

您可以使用self.send控制器上的 来通过帖子类型动态解析路径。假设您在字符串中有创建的帖子的类型(如果 Notice < Post 并且如果您使用单表继承,我不明白您的问题):

post_type = # Get the specific post type ( "notice, faq ...")
redirect_to self.send("#{post_type}_path", @post.board_id) 
于 2012-09-03T07:10:32.693 回答