0

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

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

在我的数据库中,我为不同的语言环境保存: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

可以在所有可能的语言环境中循环运行。但我找不到任何好的方法来做到这一点。

4

2 回答 2

2

怎么样:

[:en, :sv].each do |locale|
    if object.send("content_markdown_#{ locale }_changed?".to_sym)
        send("generate_new_#{ locale }_html".to_sym)
    end
end
于 2012-07-10T10:38:03.453 回答
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
}

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

于 2012-07-10T10:37:54.057 回答