在rails中重定向用户

时间:2015-02-04 20:18:32

标签: ruby-on-rails ruby redirect url-redirection

我有一个配置文件控制器,允许用户访问自己的个人资料,但不允许其他用户个人资料。

当我访问像http://localhost:3000/en/profiles/2这样的网址时。如果URL对应于disown配置文件,我希望将我的用户重定向到他们自己的配置文件。我怎么能处理这个?

我的个人资料控制器中的实际显示操作如下:

  def show
    @profile = Profile.find(params[:id])
    @user = current_user 
    @profile  = @user.profile
  end

我已经尝试过这种方法但是没有工作

  def correct_user
    redirect_to(profile_path) unless current_user == (@profile.user if @profile) 
  end

1 个答案:

答案 0 :(得分:2)

您应该将逻辑移到before_action

before_action :find_profile, :enforce_current_profile

def show
end

protected

def find_profile
  @profile = Profile.find(params[:id])
end

def enforce_current_profile
  unless @profile && @profile.user == current_user
    redirect_to(profile_path)
  end
end

但是,您真正想要做的是将配置文件控制器转换为路由文件中的resource而不是resources

resource :profile

通过这种方式,Rails将生成

GET /profile

而不是

GET /profile/2

你不需要任何控制。只需设置

def show
  @user = current_user
  @profile = @user.profile
end

使用resource代替resources不会提供index操作,但我怀疑您是否需要它。