我正在使用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
模型怎么可能不知道翻译属性的更新?
我错过了什么?
感谢您的帮助!
我的项目:
修改 :(我的表单摘录)
f.translated_inputs 'Translated fields', switch_locale: true do |t|
t.input :title
t.input :content
end
答案 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
试试这个