FriendlyId没有更新slug更改标题

时间:2016-10-18 07:58:20

标签: ruby-on-rails activeadmin friendly-id globalize

我正在使用ActiveAdmin,Globalize和FriendlyId构建Rails应用程序。

在我的模型中,我确定了Globalize和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中更新文章标题时,slug永远不会被friendly_id更新,所以我添加了这个方法:

def should_generate_new_friendly_id?
   title_changed? || super
end

当我这样做时,title_changed?因为我不知道的原因没有将新标题发送到模型,所以总是假的,但是对于未翻译的其他参数,它们是正确的。

前:

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

模型怎么可能不知道翻译属性的更新?
我错过了什么?

感谢您的帮助!

我的项目

  • Rails 4.2.7.1 / Ruby 2.3.0
  • ActiveAdmin 1.0.0pre4
  • Globalize 5.0.1
  • FriendlyId 5.1.0
  • FriendlyId Globalize 1.0.0.alpha2

修改 :(我的表单摘录)

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

1 个答案:

答案 0 :(得分:2)

但是当你在ActiveAdmin中保存模型时,如果你在表单中有一个slug字段并且感觉不到,那么将包含空字符串并且不会生成slug。 怎么解决?在模型中覆盖slug setter方法,如下所示:

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



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

试试这个