2013-07-20 9 views
21

अपडेट कर रहा है नहीं मैं उपयोग कर रहा हूँ निम्नलिखित:रेल 4 अनुकूल ईद स्लग

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

मैं अपने रेल पर एक लेख अनुभाग 4 वेबसाइट बनाने रहा हूँ। मेरी समस्या यह है कि जब मैं एक मौजूदा आलेख का नाम बदलता हूं तो स्लग अपडेट नहीं होता है।

यह वही है मैं अब तक है:

extend FriendlyId 
friendly_id :name, use: :slugged 

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

शायद friendly_id 4 से इस विधि की कोशिश (-> रेल 3 compat संस्करण।) Http://rubydoc.info/github/FriendlyId/friendly_id/4.0-stable/file/Guide.rdoc#Deciding_When_to_Generate_New_Slugs –

+1

हाँ कि काम किया करते थे बस जोड़ना: def_generate_new_friendly_id? सच अंत – Brian

+0

हाँ निश्चित रूप से .. – Brian

उत्तर

49

FriendlyId 4 में (रेल 3 संगत) था वहाँ एक विधि

should_generate_new_friendly_id? 

और आप जब स्लग नियंत्रित करने के लिए अपने मॉडल पर यह निर्धारित कर सकते हैं पुनर्जन्म है जब नाम परिवर्तन स्लग पुनर्जीवित करने के लिए

def should_generate_new_friendly_id? 
    name_changed? 
end 

की कोशिश करो।

संपादित

FriendlyId संस्करण 5 (रेल 4 संगत) अब और बचाने पर मल को पुनर्जीवित नहीं करता है। इस कार्यक्षमता को पुनर्स्थापित करने के लिए आप ऊपर दिए गए समाधान को सहेजने या उपयोग करने से पहले स्लग कॉलम को nil पर सेट कर सकते हैं।

संपादित 2

आप अपने के रूप में इस issue में संदर्भित रेल FriendlyId> 5 के लिए काम करने की बचत होती है के लिए स्लग सेटर ओवरराइड करने के लिए की जरूरत है।

मॉडल फ़ाइल

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

नाम_changed था? एक यादृच्छिक उदाहरण? या क्या हमें '_changed' जोड़ना चाहिए? मॉडल के लिए? –

+7

@ हरशाएमवी '[विशेषता] _changed?' रेल द्वारा आपके लिए बनाई गई एक विधि है। –

+1

ईमानदारी से पीएफएफ, यहां तक ​​कि स्लग को नील सेट करना भी काम नहीं कर रहा है।चूंकि दोस्ताना_आईडी ने रेल 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) चलाने पर कुछ भी नहीं होगा, मुझे लगता है कि आपका शीर्षक नहीं बदलता है। (पहली विधि रूसी भाषा को संभालती है)

तो पहले मॉडल के साथ काम करते समय सभी ने बहुत अच्छा काम किया, लेकिन फिर जब मैंने अगले मॉडल के लिए तैयार कोड कॉपी किया, तो मैं स्लगिफाइफा करना चाहता था, मैं कुछ मुद्दों में भाग गया। उम्मीद है कि यह किसी की मदद करता है।

संबंधित मुद्दे