2017-09-29 3 views
1

Création d'une application Web Blog Rails. J'ai décidé d'utiliser la gemme FriendlyID et je veux ajouter la possibilité de personnaliser les limaces sur la vue d'édition). Cependant, il semble que la limace ne peut pas être modifiée par elle-même. Actuellement, la limace n'est mis à jour lorsque le titre est exécuté et je voudrais avoir une limace qui peut être mis à jour indépendamment et non lié nécessairement au titreModifier des limaces indépendamment du titre dans Rails à l'aide de FriendlyID

Blog.rb

class Blog < ApplicationRecord 
    enum status: { draft: 0, published: 1 } 

    extend FriendlyId 
    friendly_id :title, :use => [:slugged, :history] 

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

blog_controller.rb

def set_blog 
    @blog = Blog.friendly.find(params[:id]) 
end 

Répondre

0

Jetez un oeil à ce poste dans le friendly_id wiki page

Disons que vous avez voulu votre Blog pour pouvoir modifier le pion indépendamment du titre (qui la limace est dérivé) et qui ne fait pas défaut à un autre champ:

class Blog < ActiveRecord::Base 
    attr_accessor :temporary_slug 
    extend FriendlyId 
    friendly_id :slug, :use => [:slugged] 

    def should_generate_new_friendly_id? 
    temporary_slug_changed? 
    end 

# track changes in non persisted attribute 

    def temporary_slug=(value) 
    attribute_will_change!('temporary_slug') if temporary_slug != value 
    @temporary_slug = value 
    end 

    def temporary_slug_changed? 
    changed.include?('temporary_slug') 
    end 

end 

Et un exemple de sortie ressemble à ceci:

blog = Blog.create(title: "How Long is a Long Long Time") 
blog.slug 
# nil 
post = Blog.update_attributes(title: "Some other title", temporary_slug: "My favorite blog") 
blog.slug 
# 'my-favorite-blog' 

Sinon, si vous voulez que le slug par défaut à une version du titre que vous feriez à la place:

class Blog < ActiveRecord::Base 
    extend FriendlyId 
    friendly_id :title, :use => [:slugged] 
    validates_presence_of :title 

    def should_generate_new_friendly_id? 
    if !slug? 
     name_changed? 
    else 
     false 
    end 
    end 
end 

blog = Blog.create(title: "How Long is a Long Long Time", slug: 'how-long') 
blog.slug 
# 'how-long' 
blog = Blog.create(title: "How Long is a Long Long Time") 
blog.slug 
# 'how-long-is-a-long-long-time' 
+0

Salut! Merci pour l'aide! Cependant, après avoir suivi les instructions, je reçois la sortie suivante pour mon blog mis à jour avec le temporary_slug: "Mon blog préféré" mis à jour: slug: "c4f2455c-08a1-47f9-bca8-722543b52971" Il semble que la limace soit convertie à un identifiant de type. Des idées ce qui se passe ici? – Maikol88