2014-11-05 2 views
0

У меня есть модель:рельсы - слизняк не обновляется после изменил запись

class Page < ActiveRecord::Base 
    has_ancestry 
    validates :slug, :name, uniqueness: true, presence: true 
    before_validation :generate_slug 

    def to_param 
     slug 
    end 

    def generate_slug 
     name_as_slug = Russian.translit(name).parameterize 
     if parent.present? 
      self.slug = [parent.slug, (slug.blank? ? name_as_slug : slug.split('/').last)].join('/') 
     else 
      self.slug = name_as_slug if slug.blank? 
     end 
    end 
end 

Моя проблема заключается в том, что я не могу обновить слизняка после измененное поле «Name» записи. Например, если пробой был /page-1/page-1-1/page-1-1-1 для страницы с name: **"Page 1.1"**, то после смены имени на Page Abrakadabra пуля остается прежней, а не /page-1/page-1-1/page-abrakadabra.

Извините за мой плохой английский.

+0

Тернарный оператор там сохраняет существующий слизень. –

+0

Спасибо, я исправил его. – jazzis18

ответ

0

Похоже, что использование вами slug.blank? препятствует изменению.

Как насчет чего-то подобного?

def generate_slug 
    name_as_slug = Russian.translit(name).parameterize 
    return if name_as_slug == slug.split('/').last 
    slug_elements = [] 
    slug_elements << parent.slug if parent.present? 
    slug_elements << name_as_slug 
    self.slug = slug_elements.join('/') 
end