9

Я использую 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 

Спасибо!

+0

Может быть, я имею в виду неправильный путь, но конфигурация утверждает, что он должен создать новый слизняка, когда колонна пробкового изменилась. Поэтому, если вы вручную измените значение столбца slug и сохраните запись, я бы предположил, что процесс генерации запускается, что приводит к старому слизу, поскольку название не изменилось !? – Vapire

+1

Чтобы ответить на ваш вопрос: он не срабатывает. И по умолчанию они объясняют обратное. Итак, вам нужно, чтобы ваш def should_generate_new_friendly_id? в каждой модели. – Ben

ответ

22

Обычно при использовании дружественного идентификатора вы никогда не обновляете слизь вручную. Вместо этого:

def should_generate_new_friendly_id? 
    slug.blank? || title_changed? 
end 

И тогда каждый раз, когда вы меняете заголовок, он автоматически обновляет слизню.

+1

Конфигурационная часть config.use Module.new {}, расположенная в файле конфигурации (которая, очевидно, помешала бы вам повторить метод should_generate_new_friendly_id в каждой модели) просто игнорируется. Очень вводящий в заблуждение, поскольку он хорошо объясняется в конце конфигурационного файла по умолчанию – Ben

+0

@Ben, пожалуйста, отредактируйте его> 1yr old – AJcodez

+0

Что-то я не получу прямо здесь ... Что теперь происходит сейчас? Я хотел бы знать. По-прежнему это объясняется в файле конфигурации по умолчанию – Ben

1

более точно, вы должны использовать self.title_changed?

def should_generate_new_friendly_id? 
    slug.blank? || self.title_changed? 
end 
+0

'self' необходимо, когда мы используем его для' setter' и для 'getter', мы можем использовать его с/без' self' –

Смежные вопросы