使用rails跟踪更改 - “已更改?”

时间:2012-07-10 09:57:29

标签: ruby-on-rails internationalization

我正在构建一个多语言网站,在rails上使用ruby,其中部分内容应该由用户生成,并且他们应该能够为所有语言创建不同版本的内容。语言支持由i18n gem处理。

部分内容是使用Markdown通过http://daringfireball.net/projects/markdown/basics创建的。

在我的数据库中,我为不同的语言环境保存:object.content_markdown_en,object.content_html_en,object.content_markdown_sv,object.content_html_sv等。

现在,如果用户更改内容,则应生成新的html。但是,如果他只使用其中一种语言进行更改,则似乎没有必要为所有语言环境重新生成html。

我认为可能有某种方法可以使用像

这样的东西
if object.content_markdown_[locale]_changed?
  generate_new_html
end

可以在循环中运行所有可能的语言环境。但我找不到任何好办法。

2 个答案:

答案 0 :(得分:2)

怎么样:

[:en, :sv].each do |locale|
    if object.send("content_markdown_#{ locale }_changed?".to_sym)
        send("generate_new_#{ locale }_html".to_sym)
    end
end

答案 1 :(得分:0)

您可以使用send按名称调用方法:

object.send("content_markdown_#{locale}_changed?".to_sym)

你的循环看起来像这样:

%w(en sv).each { |locale|
  if object.send("content_markdown_#{locale}_changed?".to_sym)
    generate_new_html
  end
}

但是,使用单独的转换表可能是更好的方法。