在辅助方法中声明实例变量

时间:2012-05-24 05:26:10

标签: ruby-on-rails

我有一个控制器 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变量。可以有任何伤害吗?我是否应该至少将变量的赋值委托给帮助程序中的私有方法?

在这种情况下进行代码重复是否更好,或者我的解决方案是否足够安全?

1 个答案:

答案 0 :(得分:1)

将您的correct_user方法移动到您的应用程序控制器中,然后您可以在任何带有before_filter的控制器中使用。