2013-07-20 5 views
21

를 업데이트하지 : 내 레일에 제 (4) 웹 사이트를 만드는 오전레일 4 친절한 아이디 슬러그 나는 다음과 같은 사용하고

gem 'friendly_id', github: 'FriendlyId/friendly_id', branch: 'master' 

. 내가 가지고있는 문제는 기존 기사의 이름을 변경할 때 슬러그가 업데이트되지 않는다는 것입니다.

내가 지금까지 무엇을 가지고 :

FriendlyId 4에서
extend FriendlyId 
friendly_id :name, use: :slugged 

add_column :articles, :slug, :string 
add_index :articles, :slug, unique: true 
+1

아마도이 방법을 friendly_id 4 (-> Rails 3 compat. version)에서 시도해보십시오. http://rubydoc.info/github/FriendlyId/friendly_id/4.0-stable/file/Guide.rdoc#Deciding_When_to_Generate_New_Slugs –

+1

예 그냥 추가 : def should_generate_new_friendly_id? 사실 끝 – Brian

+0

예 ... 확실합니다. – Brian

답변

49

(레일 호환 3)하는 방법

should_generate_new_friendly_id? 

있었다 당신은 때 슬러그 제어 할 모델을 정의 할 수 있습니다 재생산된다. 시도

def should_generate_new_friendly_id? 
    name_changed? 
end 

이름이 바뀔 때 슬래그 재생성.

편집

FriendlyId 버전 5 (레일 호환 4) 더 이상 저장에 슬러그를 다시 생성하지 않습니다. 이 기능을 복원하려면 위에 제공된 솔루션을 저장하거나 사용하기 전에 슬러그 열을 nil으로 설정할 수 있습니다.

당신이 issue에서 참조로 레일 < 5 & FriendlyId> 5 일을 저장 당신은 슬러그 세터를 오버라이드 (override) 할 필요가 2

편집 할 수 있습니다.

는 모델 파일

def slug=(value) 
    if value.present? 
     write_attribute(:slug, value) 
    end 
    end 
+0

은 (는) name_changed입니까? 임의의 예? 또는 '_changed'를 추가해야합니까? 모델을 위해? –

+7

@HarshaMV'[attribute] _changed? '는 레일즈가 생성 한 메소드입니다. 솔직히 슬러그를 0으로 설정해도 작동하지 않습니다. –

+1

friendly_id가 레일 3, 버전 5 등으로 업데이트 되었기 때문에 무작위로 작동했습니다. 의미, * 무작위로 *. 너무 나빴어. – Ben

2

나는이 문제를 가지고 그냥 내가 발견 한 것을 지적 할이 추가.

만 문서

class Post < ActiveRecord::Base 
extend FriendlyId 
friendly_id :title, use: :slugged 
end 

다음 Post.find_each(&:save) 실행 같이 할 경우 -

내 경우에는 그러나

, 나 또한 내 모델에서 이러한이 ... 슬러그 거 업데이 트됩니다

class Post < ActiveRecord::Base 
extend FriendlyId 
friendly_id :title, use: :slugged 

def normalize_friendly_id(text) 
    text.to_slug.normalize(transliterations: :russian).to_s 
end 

def should_generate_new_friendly_id? 
    title_changed? 
end 
end 

위의 코드로 실행하면 아무 것도 수행하지 않습니다. Post.find_each(&:save) 제목이 변경되지 않았으므로 추측합니다.

그래서 첫 번째 모델로 작업 할 때 모두 훌륭하게 작동했지만 다음 모델을 준비 할 때 준비된 코드를 복사 할 때 몇 가지 문제가 발생합니다. 누군가가 도움이되기를 바랍니다.