2016-10-18 2 views
0

Я создаю приложение Rails, используя ActiveAdmin, Globalize и FriendlyId.FriendlyId не обновляет slug на названии изменен

В моей модели я рассчитался на глобализацию и FriendlyId параметров (выдержка):

class Post < ActiveRecord::Base 
    translates :title, :slug, :content 
    active_admin_translates :title, :slug, :content do 
    validates :title, presence: true 
    end 

    extend FriendlyId 
    friendly_id :slug_candidates, 
       use: [:slugged, :history, :globalize, :finders] 

    private 

    def slug_candidates 
    [[:title, :deduced_id]] 
    end 

    # Used to add prefix number if slug already exists 
    def deduced_id 
    count = Post.where(title: title).count 
    return count + 1 unless count == 0 
    end 
end 

Однако, когда я обновляю название статьи в ActiveAdmin, слизняк никогда не обновляется friendly_id, поэтому я добавил этот метод :

def should_generate_new_friendly_id? 
    title_changed? || super 
end 

Когда я это делаю, title_changed? всегда false, поскольку новое название не отправляется в модель по той причине, которую я не знаю, но для других параметров, которые не переведены, они получены правильно.

Ex:

logger.debug(title) # => Give me new updated title value BUT 
title_changed? # => Always nil 
online_changed? # => Works 

Как это возможно, что модель не знает об обновлении переводимых атрибутов?
Что я пропустил?

Благодарим за помощь!

My Project:

  • Rails 4.2.7.1/рубин 2.3.0
  • ActiveAdmin 1.0.0pre4
  • Globalize 5.0.1
  • FriendlyId 5.1.0
  • FriendlyId Globalize 1.0.0.alpha2

Edit: (Выдержка из моей формы)

f.translated_inputs 'Translated fields', switch_locale: true do |t| 
    t.input :title 
    t.input :content 
end 

ответ

0

Но когда вы сохраняете модель в ActiveAdmin, если у вас есть поле пробкового в форме и не чувствую, что будет содержать пустую строку и пул не будет сгенерирован. Как это исправить? Переопределить метод пробкового сеттер в модели, как это:

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



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

попробовать это

+0

Спасибо, но у меня нет никакого «слизняк» поля ввода в моей форме (я редактировал мой вопрос добавления формы экстракта). И когда я создаю новое сообщение, slug правильно устанавливается для всех языков. – anthony

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