2016-04-16 4 views
1

私のアプリケーションでは、ユーザーは投稿を作成することができ、ユーザーは別のユーザーの投稿の修正をコメントとして考えることができます。各ユーザーには多数の投稿があり、各投稿には多くの修正が加えられます。rails - 類似のルートを作成するベストプラクティス?

投稿の各表示ページに、新しい修正を作成するフォームがあります。これは、user_post_correctionsパスを使用します。

各ユーザーの表示ページで、投稿用に投稿した各修正を表示したいと思います。これには、user_correctionsパスが必要です。

これを達成するために、私は私のroutes.rbをして、次のを持っている:私は互いに非常に類似しているネストされた2つのルートを作成してきたように、直感的に

resources :users do 
    resources :posts do 
     resources :corrections 
     end 
    end 

    resources :users do 
     resources :corrections 
    end 

これは、私に悪い感じ。

これを行うより良い方法はありますか?私のコードは正常に動作していますが、この種のモデルを実装するためのベストプラクティスの方法はありますか?ネストされたルートを作成するときに不ネストされないようにあなたが取るべきしかし

concern :correctable do 
    resources :corrections 
end 

# just an example of multiple concerns 
concern :commentable do 
    resources :comments 
end 

resources :users, concerns: :correctable 
resources :posts, concerns: [:correctable, :commentable] 

答えて

1

Routing concernsはあなたのルートを乾燥するための優れたが、利用不足ツールです。

多くの場合、あなたは親によってスコープされる集団行動[new, index, create]場合があります:あなたはそれが固有のIDを持っている場合は、必ず直接レコードにアクセスすることができますので、UNSCOPEDするメンバーの行動をしたいものの

GET|POST /posts/:post_id/corrections 
GET  /posts/:post_id/corrections/new 

を。

resources :corrections, only: [:show, :update, :edit] 

concern :correctable do 
    resources :corrections, only: [:new, :index, :create] 
end 

resources :users, :posts, concerns: [:correctable] 

shallow: trueオプションはこのような何かを行いますが、それは、スコープ外のルートを追加するとあなたは同じresources複数回宣言するときにうまく動作しない:このあなたがそうのようなルートを宣言するを行うには

GET /corrections/:id 
GET /corrections/:id/edit 
PATCH /corrections/:id 
DELETE /corrections/:id 

すべての呼び出しのために。

関連する問題