我正在努力实施董事会。
现在我有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语句处理这个问题,但它似乎很乱。
有没有适当的解决方案?
答案 0 :(得分:0)
您可以使用控制器上的self.send
按帖子类型动态解析路径。假设你在字符串中有所创建帖子的类型(如果注意< Post以及你是否使用单表继承,我不明白你的问题):
post_type = # Get the specific post type ( "notice, faq ...")
redirect_to self.send("#{post_type}_path", @post.board_id)