Я использую friendly_id
5.0.0.rc1, а также active_admin
.friendly_id slug не меняется при обновлении
Казалось бы, все работает отлично, как и ожидалось, за исключением того, что обновление slug
атрибут/столбец записи, то в active_admin не делает ничего, кроме (он держит это то же самое)
Я нахожу такое же поведение, только с помощью консоль:
p = Post.first
p.slug
#=> 'test'
p.slug = 'another-test'
p.save
#=> true
p.slug
#=> 'test
Моя конфигурация:
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
Моя модель:
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
мой контроллер:
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
Спасибо!
Может быть, я имею в виду неправильный путь, но конфигурация утверждает, что он должен создать новый слизняка, когда колонна пробкового изменилась. Поэтому, если вы вручную измените значение столбца slug и сохраните запись, я бы предположил, что процесс генерации запускается, что приводит к старому слизу, поскольку название не изменилось !? – Vapire
Чтобы ответить на ваш вопрос: он не срабатывает. И по умолчанию они объясняют обратное. Итак, вам нужно, чтобы ваш def should_generate_new_friendly_id? в каждой модели. – Ben