2013-07-20 20 views
21

Güncellenmesi değil: Ben Ruby on bir madde bölümüne 4 web sitesi oluşturmaRaylar 4 Dostu Kimliği Slug aşağıdaki kullanıyorum

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

. Sahip olduğum sorun, mevcut bir makalenin adını değiştirdiğimde sümükün güncellenmemesi.

Bu

Bugüne kadar ne var:

FriendlyId 4'te
extend FriendlyId 
friendly_id :name, use: :slugged 

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

Belki friendly_id 4'ten bu yöntemi denemek - http://rubydoc.info/github/FriendlyId/friendly_id/4.0-stable/file/Guide.rdoc#Deciding_When_to_Generate_New_Slugs –

+1

evet bu tarafından çalışmış (. 3 compat versiyon> Raylar) sadece ekleme: def should_generate_new_friendly_id? true end – Brian

+0

evet emin için .. – Brian

cevap

49

(Raylar uyumlu 3) yöntemi

should_generate_new_friendly_id? 

vardı ve ne zaman sülük kontrol etmek için modele bunu tanımlayabiliriz rejenere edilir. zaman isim değişikliği kurşunu yeniden oluşturmak için

def should_generate_new_friendly_id? 
    name_changed? 
end 

deneyin .

DÜZENLEME

FriendlyId sürüm 5 (Raylar uyumlu 4) artık tasarruf üzerinde sümüklü böcek yenilenmez. Bu işlevselliği geri yüklemek için, yukarıda verilen çözümü kaydetmeden veya kullanmadan önce sülük sütunu nil'a ayarlayabilirsiniz.

senin bu issue başvurulan olarak Raylar FriendlyId> 5 için çalışmak kazandırır için Sen sülük ayarlayıcı geçersiz kılmak için gereken 2

DÜZENLEME.

modeli dosyası

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

name_changed? rastgele bir örnek? ya da '_changed?' ekleyelim mi? model için? –

+7

@HarshaMV '[attribute] _changed?', Rails tarafından sizin için oluşturulmuş bir yöntemdir. –

+1

dürüstçe pfff, hatta nemli sümüklü bile çalışmıyor.Friendly_id raylar 3, sürüm 5 vs için güncellendi beri ... sadece rastgele çalışıyor. Anlamı, * mega-rastgele *. Çok kötü. – Ben

2

Bu sorunları var ve sadece ben fark ettim biliyor işaret etmek istiyorum bu ekleyin.

yalnızca dokümanlar

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

ve sonra Post.find_each(&:save) çalıştırmak gibi yaparsanız -

benim durumumda Ancak

, ben de benim modelinde bu var ... sümüklüböcek olacak güncellenmeyen edilir

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 

Yukarıdaki kodla, Post.find_each(&:save) çalıştırdığınızda hiçbir şey yapmazsınız. (ilk yöntem, rus dili)

bu yüzden ilk modelle çalışırken harika çalıştı, ancak sonra hazır kodları bir sonraki modele kopyaladığımda, slugify istedim, bazı sorunlara rastlıyorum. Umarım birisine yardım eder.