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