2012-07-10 164 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