9

Ich verwende friendly_id 5.0.0.rc1, und auch active_admin.friendly_id slug nicht ändern bei update

Es alles erscheinen würde perfekt funktioniert wie erwartet, mit Ausnahme der Tatsache, dass ein slug Attribut/Spalte in active_admin Rekord Aktualisierung nichts tut (es hält es die gleiche)

ich das gleiche Verhalten finden nur mit Konsole:

p = Post.first 
p.slug 
#=> 'test' 
p.slug = 'another-test' 
p.save 
#=> true 
p.slug 
#=> 'test 

Meine config:

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 

Mein Modell:

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 

mein Controller:

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 

Dank!

+0

verwenden Vielleicht bin ich die falsche Art und Weise zu denken, aber Ihre Konfiguration besagt, dass es einen neuen Rohling erzeugen soll, wenn die Schnecke Spalte geändert. Wenn Sie also den Wert der Slugspalte manuell ändern und den Datensatz speichern, würde ich davon ausgehen, dass der Generierungsprozess ausgelöst wird, was zu dem alten Slug führt, da sich der Titel nicht geändert hat !? – Vapire

+1

Um Ihre Frage zu beantworten: Es löst nicht aus. Und standardmäßig erklären sie das Gegenteil. Sie müssen also Ihr def sent_generate_new_friendly_id haben? in allen Modellen. – Ben

Antwort

22

Normalerweise wird bei der Verwendung der Friendly ID der Slug nie manuell aktualisiert. Stattdessen:

Und dann jedes Mal, wenn Sie den Titel ändern, wird es automatisch aktualisieren den Slug.

+1

Der config.use Module.new {} -Teil, der sich in der Konfigurationsdatei befindet (was natürlich verhindern würde, dass Sie die Methode sent_generate_new_friendly_id in jedem Modell wiederholen) wird einfach ignoriert. Sehr irreführend, wie es am Ende der Standardkonfigurationsdatei gut erklärt wird – Ben

+0

@Ben bitte bearbeiten, es ist> 1Jahr alt – AJcodez

+0

Etwas, das ich nicht hier richtig verstehe ... Was ist jetzt up to date dann? Ich würde gerne wissen. Es ist immer noch so in ihrer Standardkonfigurationsdatei beschrieben – Ben

1

genauer, sollten Sie self.title_changed?

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

'self' ist notwendig, wenn wir es für' setter' verwenden und für 'getter' können wir es mit/ohne' self' verwenden –

Verwandte Themen