Ruby on rails 更新具有友好\u id的属性后无法更改URL路径
我一直在遵循Railscast教程,了解如何实现友好的\u id,由于某些原因,我的URL在更新属性后不会改变 假设我注册了一个用户:全名为“John Doe”,它成功创建了slug/John Doe。但是,如果我将我的名字更新为“测试用户”,url仍然是/john doe 我当前的设置是: 用户\u控制器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
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