2017-09-29 17 views
1

블로그 레일스 webapp을 생성합니다. FriendlyID 보석을 사용하기로 결정했고 편집보기에서 슬러그를 맞춤화하는 기능을 추가하고 싶습니다.) 그러나 그것은 슬러그 자체로 수정할 수없는 것 같습니다. 현재 슬러그 제목 만이 실행될 때 업데이트 될 때 나는FriendlyID를 사용하여 Rails의 제목과 별도로 슬러그 편집

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 

답변

0

의 사용자가 편집 할 수 있도록 Blog를 원했던 말을하자 friendly_id wiki page

에서이 포스트를 살펴 보자 (슬러그가에서 파생)하고 다른 필드에 기본값으로하지 않습니다 제목에서 독립적으로 슬러그 :

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 

그리고 예를 들어 출력은 다음과 같습니다

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' 

을 그렇지 않은 경우 슬러그가 다음과 같이 대신 할 제목의 버전을 기본값으로 사용하도록하십시오.

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

안녕하세요! 도와 주셔서 감사합니다! 그러나 지침을 따른 후에는 임시 업데이트와 함께 업데이트 된 블로그 항목에 대해 다음 출력을 얻습니다. "내 즐겨 찾기 블로그"업데이트 : 슬러그 : "c4f2455c-08a1-47f9-bca8-722543b52971" 슬러그가 변환 된 것 같습니다. 어떤 타입의 id에. 어떤 아이디어가 여기에서 일어나는거야? – Maikol88