首页 > 解决方案 > 更新单一资源模型时重定向到错误的 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

标签: ruby-on-rails

解决方案


您可以覆盖相关模型的 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。


推荐阅读