2017-02-10 2 views
4

У меня есть модель, и в соответствии с friendly_id жемчужиной это выглядит следующим образом:Friendly_id камня с помощью UUID, несмотря на overrriden

class FinancialYear < ApplicationRecord 
    extend FriendlyId 
    friendly_id :slug_candidates, use: :slugged 

    def slug_candidates 
    [ 
     :end_year, 
     [:end_year, :max_id] 
    ] 
    end 

    def should_generate_new_friendly_id? 
    self.slug.blank? || self.year_changed? 
    end 

    def end_year 
    if !self.year.nil? && self.year.length > 1 
     self.year.split('-')[-1].strip 
    else 
     self.year 
    end 
    end 

    def max_id 
    FinancialYear.where(year: end_year).count + 1 
    end 

end 

Что он должен сделать, это включить в год: «1999-2000» в slug: «2000» и 2000-2 ... и т. д., чтобы избежать столкновений.

К сожалению, мои тесты неудовлетворительные ожидается: «2000», получил: «2000-f7608e8b-a2e7-449c-ae54-4785c7a68dec»

Я использую friendly_id на другую модель в моем приложении, и я использую ту же технику, , и его работа отлично. Любая помощь или предложения относительно того, почему это не работает, будут очень оценены.

UPDATE После еще экспериментов я обнаружил, что это, кажется, происходит только в моих RSpec тесты - но я не понимаю, почему? Есть предположения?

+0

Здесь 'friendly_id: slug_candidates, use:: slugged' вы говорите, что используете метод slug_candidates для установки пули, но вы его не разместили. Вы определили его? – mrlew

+0

opps, обновил вопрос – Ash

+0

Я воспроизвел вашу настройку здесь (объявление того же кода) и не обнаружил ошибок. Пули, в которых заданы «2000-2», «2000-3», «2000-4». Может быть, проблема в другом месте. Печать: http://imgur.com/a/TLvB4 – mrlew

ответ

3

я была такая же проблема, я решить ее удаляемого всех значений слизняка первый, а затем повторный запуск моих спасти.

###delete all slug values 
User.update_all(:slug=>nil) 

###re-run to get the new slug candidate affective overriding the default alpanumeric slug 
User.find_each(&:save) 

Надеюсь, что это поможет.

Смежные вопросы