2015-01-13 4 views
0

동일한 제목의 게시물이 2 개 있다고 가정 해 봅니다. "슈퍼 히어로"입니다. 첫 번째 게시물에는 URL superheros-alternative-1이 있어야하고 두 번째 게시물에는 superheros-alternative-2가 있어야합니다. 문제는이 게시물 중 하나의 제목을 업데이트 할 때 URL이 둘 다 변경되어야한다는 것입니다. 내 말은 "경탄하다"라는 제목을 바꾸면 URL은 다음과 같이되어야합니다 marvel-alternative-1 and marvel-alternative-2. 지금 나는 당신이에 대한 update_column, because it will not trigger the callbacks, validations and such 사용하지 않아야하므로, friendly_id이 슬러그를 업데이트하지 않습니다 다음 코드중복을위한 친숙한 ID

class Post < ActiveRecord::Base 

    before_update :update_slug 

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

    def update_slug 
    title = Post.find(self.id).title 
    Post.where(title:title).each do |post| 
     post.update_column(:title,self.title) 
    end 
    end 
end 
+0

그래서 추가 할, 당신의 __question__ 것입니다 정확하게? 게시물에 게시물이 하나도 없습니다. –

+0

아, 죄송합니다. "제목을 업데이트 할 때 기본 페이지 및 해당 사본의 URL을 업데이트하는 방법은 무엇입니까?" –

답변

1

있습니다. 모델 개체 특성을 업데이트하고 대신 .save을 호출하십시오. 당신이 (after_save 콜백) 일반 하나를 업데이트 한 후

또한, 다른 레코드를 업데이트 할 수 있습니다 -이 당신이 원래 제목과 새에 액세스 할 수 있습니다, 필요없이 Post.find(self.id)

+0

네, 맞습니다.'update_column'은 콜백을 호출하지 않습니다. 아마도 컨트롤러 대신 모델에서 작동하는 것이 더 나은 해결책 일 것입니다. 고마워요! –

+0

@ArtemGalas 컨트롤러에서가 아니라 [모델의 ActiveRecord 콜백] (http://api.rubyonrails.org/classes/ActiveRecord/Callbacks.html)을 의미합니다. ;) –