Ruby on rails 更新具有友好\u id的属性后无法更改URL路径

Ruby on rails 更新具有友好\u id的属性后无法更改URL路径,ruby-on-rails,friendly-id,Ruby On Rails,Friendly Id,我一直在遵循Railscast教程,了解如何实现友好的\u id,由于某些原因,我的URL在更新属性后不会改变 假设我注册了一个用户:全名为“John Doe”,它成功创建了slug/John Doe。但是,如果我将我的名字更新为“测试用户”,url仍然是/john doe 我当前的设置是: 用户\u控制器 def show @user = User.friendly.find(params[:id]) end 模型-user.rb extend FriendlyId friendly_i

我一直在遵循Railscast教程,了解如何实现友好的\u id,由于某些原因,我的URL在更新属性后不会改变

假设我注册了一个用户:全名为“John Doe”,它成功创建了slug/John Doe。但是,如果我将我的名字更新为“测试用户”,url仍然是/john doe

我当前的设置是:

用户\u控制器

def show
 @user = User.friendly.find(params[:id])
end
模型-user.rb

extend FriendlyId
 friendly_id :fullname, use: [:slugged, :history]
我也移民了

class AddSlugsToUsers < ActiveRecord::Migration
 def change
  add_column :users, :slug, :string
  add_index :users, :slug, unique: true
 end
end
完成了:

User.find_each(&:save)
在rails c中


我做错了什么?

友好的\u id

这是一个常见的问题与友好_id-:


文档

从FriendlyId 5.0开始,只有在slug字段为 无如果要重新生成slug,请将slug字段设置为nil:

您还可以覆盖“是否应该生成新的友好id?”?方法,该方法允许您精确控制何时设置新的友好ID:

class Post < ActiveRecord::Base
  extend FriendlyId
  friendly_id :title, :use => :slugged

  def should_generate_new_friendly_id?
    title_changed?
  end
end
class Post:sluged
def是否应生成新的友好id?
标题改变了吗?
结束
结束
如果您希望扩展默认行为,但添加了自己的条件,请不要忘记从实现中调用super:

class Category < ActiveRecord::Base
  extend FriendlyId
  friendly_id :name, :use => :slugged

  def should_generate_new_friendly_id?
    name_changed? || super
  end
end
类别:sluged
def是否应生成新的友好id?
名字改变了吗超级的
结束
结束

对于你,我建议:

#app/models/user.rb
Class User < ActiveRecord::Base
   ...

   def should_generate_new_friendly_id?
      name_changed? || super
   end
end
#app/models/user.rb
类用户
这很有效。但是,我想在旧URL上执行301重定向,并尝试添加def show@user=user.friendly.find(params[:id])if request.path!=user_path(@user)将_重定向到@user,status::moved_永久结束,但得到了未定义的方法“user_path”。显示文件(配置文件页面)存储在“users/show.html.erb”中,那么为什么该路径不起作用呢?我的路由设置如下:get'/intern/:id',to:'users#show'您需要在
friendly_id
中包含该选项-这将创建一个名为
friendly_id_slug
的表,该表将存储历史数据(将自动重定向)。我做到了:friendly_id:slug_候选者,使用:[:sluged,:history]#尝试根据以下字段以#增加特异性顺序构建slug。def slug_候选者[:fullname,[:fullname,:id]]end,我已经生成了友好的_id表,但我希望它重定向URL,因此如果我转到/rich-1并将其更改为rich-2并访问rich-2,它需要将您重定向到rich-2。如果这有意义的话?您是否尝试重新启动Rails服务器/现在可以使用:friendly_id:slug_候选者,使用:[:sluged,:history]def slug_候选者[:fullname,[:fullname,Random.new.rand(1..100)]end
class Category < ActiveRecord::Base
  extend FriendlyId
  friendly_id :name, :use => :slugged

  def should_generate_new_friendly_id?
    name_changed? || super
  end
end
#app/models/user.rb
Class User < ActiveRecord::Base
   ...

   def should_generate_new_friendly_id?
      name_changed? || super
   end
end