ruby on rails - friendly_id - Rails 4 Friendly Id Slug no se actualiza
friendly_id gem (2)
En FriendlyId 4 (Rails 3 compatible) había un método.
should_generate_new_friendly_id?
y podría definirlo en su modelo para controlar cuándo se regenera la babosa. Tratar
def should_generate_new_friendly_id?
name_changed?
end
para regenerar slug cuando el nombre cambia.
EDITAR
La versión 5 de FriendlyId (compatible con Rails 4) ya no regenera las babosas al guardar. Para restaurar esta funcionalidad, puede establecer la columna slug en nil
antes de guardar o usar la solución proporcionada anteriormente.
Editar 2
Debe anular el ajustador de slug para que sus guardados funcionen para Rails <5 & FriendlyId> 5 como se menciona en este issue .
Agrega esto al archivo modelo
def slug=(value)
if value.present?
write_attribute(:slug, value)
end
end
Estoy usando lo siguiente:
gem ''friendly_id'', github: ''FriendlyId/friendly_id'', branch: ''master''
Estoy creando una sección de artículos en mi sitio web de Rails 4. El problema que tengo es que cuando cambio el nombre de un artículo existente, la bala no se actualiza.
Esto es lo que tengo hasta ahora:
extend FriendlyId
friendly_id :name, use: :slugged
add_column :articles, :slug, :string
add_index :articles, :slug, unique: true
Tengo estos problemas y solo quiero señalar lo que he notado.
si solo haces como en docs
class Post < ActiveRecord::Base
extend FriendlyId
friendly_id :title, use: :slugged
end
y luego ejecuta Post.find_each(&:save)
- slug se actualizará ...
Sin embargo en mi caso, también tengo estos en mi modelo.
class Post < ActiveRecord::Base
extend FriendlyId
friendly_id :title, use: :slugged
def normalize_friendly_id(text)
text.to_slug.normalize(transliterations: :russian).to_s
end
def should_generate_new_friendly_id?
title_changed?
end
end
con el código anterior no hará nada cuando Post.find_each(&:save)
, asumo que tu título no cambia. (primer método maneja el idioma ruso)
así que cuando trabajé con el primer modelo todo funcionó muy bien, pero luego cuando copié el código listo para el siguiente modelo que quería hacer, me encontré con algunos problemas. Espero que ayude a alguien.