0

我正在使用 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

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

谢谢你的帮助 !

我的项目

  • 导轨 4.2.7.1 / Ruby 2.3.0
  • ActiveAdmin 1.0.0pre4
  • 全球化 5.0.1
  • 友好ID 5.1.0
  • FriendlyId 全球化 1.0.0.alpha2

编辑:(我的表格摘录)

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

1 回答 1

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

尝试这个

于 2016-10-18T09:29:48.843 回答