2012-09-03 144 views
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'。做控制器的動作

一樣,

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 

,當我去到本地主機:3000 /通知/新的,它工作正常

但是當我提交了新的職位,控制器重定向到本地主機:3000 /板/ 1 /職位/

因爲redirect_to board_posts_path(@post.board_id)

這不是我想要的。

我能勝任這個使用if語句,但似乎凌亂。

有沒有適當的解決方案呢?

回答

0

您可以使用self.send控制器上動態地解決由柱類型的路徑。假設你已經創建的帖子在一個字符串類型(我沒有從如有通知<張貼您的問題理解和如果使用單表繼承):

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

要知道,一個發送方法也許能夠完全暴露您的課程,並可以通過提交任何board_id的簡單獲取請求進行調用。或類方法。 – dennis