私のアプリケーションには、ユーザー モデル/コントローラーがあります。ユーザーは、複数のビデオ、画像、ブログ アイテムを持つことができます。ユーザー、アイテムにはコメントを付けることができます。だから私は次のコントローラを持っています
- ユーザー
- ユーザー/コメント
- ユーザー/画像
- ユーザー/写真/コメント
- ユーザー/ビデオ
- ユーザー/動画/コメント
- ユーザー/ブログ
- ユーザー/ブログ/コメント
問題は、すべてのコメント コントローラーがほとんど同じであり、コードの管理が難しくなっていることです。ここで、サブコントローラーから呼び出されるメソッドを持つ、アプリレベルの CommentsController などの中心的な場所を指定したいと思います。
それを行う最善の方法は何ですか?
たとえば、次のコードはそのような変更の後にどのように見えるでしょうか:
class User::Picture::CommentsController < ApplicationController
def delete_all
@user = User.find(params[:user_id])
@picture = @user.pictures.find(params[:picture_id])
if @picture.has_access(current_user)
@picture.comments.destroy_all
redirect_to :back, :notice=>t(:actionsuccesful)
else
redirect_to :back, :alert=>t(:accessdenied)
end
end
end
@user && @picture の初期化は、異なるメソッド間で同じです (destroy、delete_all、create、index)。サブコントローラー固有の before_filter に移動できますか? そして、delete_all は CommentsController に実装されますか?