我有一个配置文件控制器,允许用户访问自己的个人资料,但不允许其他用户个人资料。
当我访问像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
答案 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
操作,但我怀疑您是否需要它。