在我的应用程序中,我有一个用户模型/控制器。用户可以拥有多个视频,图像和博客项目。用户和项目可以有评论。所以我有以下控制器
问题是,所有注释控制器几乎完全相同,代码变得难以管理。现在我想指定一个中心位置,例如一个app级的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&amp;&amp; @picture初始化在不同方法中是相同的(destroy,delete_all,create,index)。它们是否可以移入before_filter,这将是一个特定的子控制器?然后,delete_all将在CommentsController中实现?
答案 0 :(得分:4)
如果代码是通用的,有两个选项:
1)包含共享方法的模块
示例:
module CommentsActions
# actions, methods
end
class User::Picture::CommentsController <ApplicationController
include CommentsActions
#your additional actions
end
2)从一个控制器继承注释控制器
示例:
class CommentsController < ApplicationController
# actions, methods, filters etc...
end
class User::Picture::CommentsController < CommentsController
#your additional actions
end