質問

私は最新のglobalize2とrails 2.2を使用しています。以下はバグなのか機能なのか疑問に思います。翻訳を取得するために、データセット内の各アイテムに対して個別のdbクエリがあるようです。数百のクエリが簡単に発生する可能性があるため、これは正しく聞こえません。

イラスト。シンプルなコントローラー:

def index
    @menu_sections = MenuSection.find(:all)
end

@menu_sectionsは、ローカライズされた属性(名前)が呼び出されるビューでループされます:

  <% @menu_sections.each do |menu_section| %>
    <p><%= link_to menu_section.name, :controller => 'store', :action => 'list_menu_items_for_section', :section_id => menu_section.id %></p>
  <% end %>

すべてのmenu_section.nameの結果がdbクエリになるように見えます:

Processing StoreController#index (for 10.0.2.2 at 2009-03-02 16:05:53) [GET]
  Session ID: 468f54928cbdc0b19c03cfbd01d09fa9
  Parameters: {"action"=>"index", "controller"=>"store"}
  MenuSection Load (0.0ms)   SELECT * FROM `menu_sections`
Rendering template within layouts/store
Rendering store/index
Rendered application/_js_includes (0.0ms)
  MenuSection Columns (0.0ms)   SHOW FIELDS FROM `menu_sections`
  MenuSectionTranslation Load (0.0ms)   SELECT * FROM `menu_section_translations` WHERE (`menu_section_translations`.menu_section_id = 1 AND (`menu_section_translations`.`locale` IN ('en','root')))
  MenuSectionTranslation Columns (0.0ms)   SHOW FIELDS FROM `menu_section_translations`
  MenuSectionTranslation Load (0.0ms)   SELECT * FROM `menu_section_translations` WHERE (`menu_section_translations`.menu_section_id = 2 AND (`menu_section_translations`.`locale` IN ('en','root')))
  MenuSectionTranslation Load (0.0ms)   SELECT * FROM `menu_section_translations` WHERE (`menu_section_translations`.menu_section_id = 3 AND (`menu_section_translations`.`locale` IN ('en','root')))
Completed in 340ms (View: 320, DB: 0) | 200 OK [http://www.dev.babooka.com/store]

あなたはどう思いますか?たぶんレールのdbデータを翻訳するより良い方法がありますか?

役に立ちましたか?

解決

次のように言って、やろうとしていることを達成できます。

def index
    @menu_sections = MenuSection.find(:all,:include=>:globalize_translations)
end

それは翻訳を熱心にロードするので、クエリは2つだけです。

他のヒント

この問題を再愛するかどうかはわかりません。しかし、私は同じ問題に遭遇しました。私は、テーブルの1列だけを翻訳しています(タイトルなど)。テーブルに100行あり、特定のロケールに対して次のようなクエリを実行する場合:

rows = Category.find(:all、.....)

データベースで101件のクエリが発生します!! Globalizeの設計者がこれを期待しているか、意図しているかはわかりません。

OR何かがありません(クエリのオプションの構成パラメータのように)。

しかし、Globalize Model Translationsの代替実装を実装したSaimon Mooreによる代替ソリューションを見つけました。あなたはそれについて読むことができます:

http://saimonmoore.net/2006 / 12/1 /グローバル化モデル変換の代替実装

ただし、これがGlobalize2で機能する場合、参照は見つかりません。

Globalize2プラグインを破棄し、Ruby I18Nライブラリを使用して独自のソリューションを展開しています。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top