method friendly_id ruby-on-rails friendly-id

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.