ruby-on-rails - index - controller active admin
friendly_id slug no cambia en la actualizaciĆ³n (2)
Estoy usando friendly_id
5.0.0.rc1, y también active_admin
.
Parece que todo está funcionando perfectamente como se esperaba, excepto por el hecho de que la actualización del atributo / columna slug
un registro en active_admin no hace nada (lo mantiene igual)
Encuentro el mismo comportamiento simplemente usando consola:
p = Post.first
p.slug
#=> ''test''
p.slug = ''another-test''
p.save
#=> true
p.slug
#=> ''test
Mi configuración:
FriendlyId.defaults do |config|
config.use :reserved
config.reserved_words = %w(admin new edit index session users register)
config.use :finders
config.use :slugged
config.slug_column = ''slug''
config.sequence_separator = ''-''
config.use Module.new {
def should_generate_new_friendly_id?
slug.blank? || slug_changed?
end
}
end
Mi modelo:
class Post < ActiveRecord::Base
default_scope { order(''created_at DESC'') }
validates :title, presence: true
validates :body, presence: true
validates :views, presence: true, numericality: { only_integer: true }
extend FriendlyId
friendly_id :title, use: [:slugged, :history]
end
mi controlador:
class PostsController < ApplicationController
def index
@posts = Post.all.page(params[:page]).per(10)
end
def show
@post = Post.find_by_slug!(params[:id])
if request.path != post_path(@post)
redirect_to @post, :status => :moved_permanently and return
else
@post.increment :views if @post
end
end
end
¡Gracias!
Por lo general, cuando utilizas una identificación amigable, nunca actualizas la babosa manualmente. En lugar:
def should_generate_new_friendly_id?
slug.blank? || title_changed?
end
Y luego, cada vez que cambie el título, actualizará automáticamente el slug.
más exactamente, ¿debería usar self.title_changed?
def should_generate_new_friendly_id?
slug.blank? || self.title_changed?
end