0

私は多言語のウェブサイトを構築しています。RubyonRailsを使用しており、コンテンツの一部はユーザー生成であり、すべての言語で異なるバージョンを作成できるはずです。言語サポートはi18ngemによって処理されます。

それらのコンテンツの一部は、http: //daringfireball.net/projects/markdown/basicsを通じてMarkdownを使用して作成されています。

私のデータベースには、object.content_markdown_en、object.content_html_en、object.content_markdown_sv、object.content_html_svなどのさまざまなロケールを保存します。

これで、ユーザーがコンテンツを変更すると、新しいhtmlが生成されることになります。しかし、彼が1つの言語でのみ変更を加えた場合は、すべてのロケールの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 に答える