重定向rails中的用户



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

当我访问像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

您可能应该将逻辑移动到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操作,但我怀疑您是否需要它

相关内容

  • 没有找到相关文章

最新更新