0

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

Mobility 使用区域设置后缀来指示哪个区域设置已更改;脏跟踪以这种方式实现,以确保清楚地知道在哪个语言环境中发生了什么变化,避免任何可能的歧义。

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

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

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

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

除了操纵 的结果之外,我应该怎么做#changed呢?

谢谢,西蒙。

4

1 回答 1

1

更新(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"]
于 2018-06-17T13:42:05.443 回答