9

friendly_id 5.0.0.rc1 및 active_admin을 사용 중입니다.friendly_id 슬러그가 업데이트시 변경되지 않음

는 active_admin에서 기록의 slug 속성/컬럼을 업데이트하는 것은 아무것도하지 않는다는 사실을 제외하고, 예상대로 완벽하게 작동되는 모든 나타납니다

난 그냥 사용하여 동일한 동작을 찾을 수 있습니다 (이것은 그것에게 동일하게 유지) 콘솔 :

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

를 사용해야하지만 구성은 슬러그 열이 변경 될 때 새로운 슬러그를 생성해야한다고 주장한다. 따라서 슬러그 열의 값을 수동으로 변경하고 레코드를 저장하면 생성 프로세스가 트리거되어서 제목이 변경되지 않았기 때문에 이전 슬러그가 발생한다고 가정합니다. – Vapire

+1

질문에 대답하십시오 : 그것은 유발하지 않습니다. 그리고 기본적으로 그들은 그 반대를 설명합니다. 그래서 당신은 당신 def_generate_new_friendly_id를 가질 필요가 있습니까? 모든 모델에서. – Ben

답변

22

일반적으로 친숙한 ID를 사용하면 슬러그를 수동으로 업데이트하지 않습니다. 대신 :

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

그리고 나서 제목을 변경할 때마다 자동으로 슬러그가 업데이트됩니다.

+1

config 파일에있는 config.use Module.new {} 부분 (모든 모델에서 should_generate_new_friendly_id 메소드를 반복하지 못하도록하는 것)은 단순히 무시됩니다. 매우 기본 설정 파일의 끝 부분에서 잘 설명되어 있기 때문에 오해의 소지가 있습니다. – Ben

+0

@Ben 편집하십시오. 1 년 넘게 수정하십시오. – AJcodez

+0

나는 지금 당장 얻지 못하는 것 ... 지금은 최신입니까? 나는 알고 싶다. 그것은 당신이 대답을 좋아하지 않는다면 여전히 기본 설정 파일 – Ben

1

더 정확하게, 당신은 어쩌면 내가 길을 잘못 생각하고 self.title_changed?

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

'setter '에'self'를 사용해야하고'getter'에'self'와 함께 /없이'self'를 사용할 수 있습니다. –