2012-07-10 165 views
0

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

部分内容是使用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

如何:

[:en, :sv].each do |locale| 
    if object.send("content_markdown_#{ locale }_changed?".to_sym) 
     send("generate_new_#{ locale }_html".to_sym) 
    end 
end 
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 
} 

然而,使用单独的翻译表可能是一个更好的办法。

+0

按秒:) – zsquare 2012-07-10 10:39:14

+0

也打我吧,你开始与''{块,但与'end' – zsquare 2012-07-10 10:39:49

+0

应该有一个警告关闭它“相同的代码正在键入“;) – Stefan 2012-07-10 10:40:22