【发布时间】:2016-10-18 07:58:19
【问题描述】:
我正在使用 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?始终为 false,因为我不知道新标题未发送到模型的原因,但对于未翻译的其他参数,它们被正确获取。
例如:
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
- 全球化 5.0.1
- FriendlyId 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
【问题讨论】:
标签: ruby-on-rails activeadmin friendly-id globalize