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

コントローラのonを使用しself.sendて、投稿タイプごとにパスを動的に解決できます。作成された投稿のタイプが文字列に含まれていると仮定します(通知<投稿であり、単一テーブル継承を使用している場合、質問からはわかりませんでした):

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 に答える