如何在移动 gem 中获取没有区域设置后缀的更改属性?



有关移动 gem 中脏跟踪的文档指出:

移动性使用区域设置后缀来指示哪个区域设置已更改;脏跟踪以这种方式实现,以确保清楚哪个区域设置中更改了什么,从而避免任何可能的歧义。

所以#changed的结果看起来像这样

post.changed
#=> ["title_en", "title_zh_cn", "body_en"]

但是,我想获得一个简化的属性数组,这些属性已更改,不带后缀,如下所示:

#=> ["title", "body"]

除了操纵#changed的结果之外,我应该如何做到这一点?

谢谢 西蒙。

>更新(2019/10/24(

我意识到它实际上更简单一些,因为更改可能发生在当前区域设置中。在这种情况下,您可以简单地从属性中删除区域设置访问器(假设任何未翻译的属性都没有带有区域设置扩展的奇怪名称(:

post.changed.map { |attr| attr.gsub(/_#{Mobility.normalized_locale}$/, '') }

原始答案

怎么样:

post.changed.map { |attr| attr.gsub /_([a-z]{2}(_[a-z]{2})?)/, ''}.uniq
#=> ["title", "body"]

最新更新