我有一个控制器 before_filter ,如果他们尝试更新其他人的个人资料,则会将非管理员用户重定向到根路径:
before_filter :correct_user, only: [:edit, :update]
....
private
def correct_user
@user=User.find(params[:id])
redirect_to(root_path) unless current_user?(@user) || current_user.admin?
end
我在两个不同的控制器中使用此过滤器,我想干掉代码。
当我将方法移动到 application_helper.rb 时,我的规范仍然存在,但我厌倦了在帮助文件中分配@user
变量。可以有任何伤害吗?我是否应该至少将变量的赋值委托给帮助程序中的私有方法?
在这种情况下进行代码重复是否更好,或者我的解决方案是否足够安全?
答案 0 :(得分:1)
将您的correct_user方法移动到您的应用程序控制器中,然后您可以在任何带有before_filter的控制器中使用。