ruby-on-rails - 更新单一资源模型时重定向到错误的 url
问题描述
配置文件更新重定向到具有原始用户 ID 的错误 URL。
配置文件的 URL 有users/user's_random_id/profile
,在我编辑和更新它之后
users/user's_random_id/profile/edit
,它重定向到users/id/profile
.
例如,更新后users/abcdef/profile/edit
重定向到users/1/profile
。“abdef”和 1 实际上是同一个对象,所以它几乎是正确的,但我想要“abcdef”。users/abcdef/profile/
我希望它在更新后重定向到。
配置文件模型属于用户模型。
用户拥有to_param
并且它适用于其控制器。
路线
resources :users, param: :random_id do
member do
resource :profile, only: [:show, :edit, :update]
end
end
配置文件控制器
def show
# @user = User.find_by(id: params[:id])
@user = User.find_by(random_id: params[:random_id])
@profile = @user.profile
end
def update
@user = User.find_by(random_id: params[:random_id])
@profile = @user.profile
if @profile.update(profile_params)
@profile.update(age: @profile.get_age)
flash[:success] = "Profile updated"
redirect_to user_profile_path
else
render 'edit'
end
end
解决方案
您可以覆盖相关模型的 ActiveRecord::Base#to_param:
class User < ApplicationRecord
def to_param
random_id
end
# or
alias_method :to_param, :random_id
end
并改变路线param
。
resources :users, param: :random_id
或者你可以使用friendly_id gem。
推荐阅读
- c++ - 如何在 C++ 中使用图形表示 DFS BFS 图和树
- python - 如何让用户选择图像中的坐标并将这些坐标作为python中方法的参数?
- docker - 我们可以在使用同一个 docker-compose.yaml 构建多个图像之前启动容器吗?
- sql - 编写查询以按客户购买的产品数量显示客户分布情况
- javascript - 为什么 QML Image 占用这么多内存?减慢申请
- c++ - 使用按顺序遍历成员函数时引发异常(堆栈溢出)的问题
- delphi - 如何检查仍然与 Delphi 10.3 连接的 BLE 设备
- php - 如何在帐单地址结帐框中替换内容
- python - 如何在 python 包装中使用 unicode 字符串用于带有 cython 的 c++ 类?
- python - 通过 TensorFlow 数据集生成器迭代批次