2012-05-08 11 views
3

私は、ロケールで動作するようにしてみてください。私が持っている動的な列名

routes.rbをで:

scope "(:locale)", :locale => /en|ro|ru/ do 
    resources :catalogs 
end 

*のapplication_controller.rbでは、私がで

# tell the I18n library where to find your translations 
I18n.load_path += Dir[Rails.root.join('lib', 'locale', '*.{rb,yml}')] 

# set default locale to something other than :en 
I18n.default_locale = :en 

before_filter :set_locale 

def set_locale 
    I18n.locale = params[:locale] || I18n.default_locale 
end 

を持っています*データベース私は列を持つテーブルを持っています:catalog_name_en; list.html.erbビューでcatalog_name_roとcatalog_name_ru

私はこのコードを追加:列catalog_name_enの値私は唯一の「catalog.catalog_name_en」を参照してくださいHTMLページに

<% @catalogs.each do |catalog| %> 

    <tr> 
     <td class="center"><%= catalog.id %></td> 
     <td class="center"><%= "catalog.catalog_name#{locale}" %> </td> 
    </tr> 
<% end %> 

ではなく、 。 ヘルプPLZ。 (コメントで述べたように)

<%= catalog.attributes["catalog_name_#{locale}"] %> 

たり短くしますが、同等:

+0

、私は信じています今すぐ受け入れられるように、1つの答えにフラグを立てる必要があります(「チェックマーク」を使用してください)。 – Romain

答えて

5

あなたは使用して試すことができ

<%= catalog["catalog_name_#{locale}"] %> 
+0

アンダースコア 'catalog_name _#{locale}';)) – jdoe

+0

@jdoeそれに応じて編集された回答。しかし、OPのサンプルコードではアンダースコアは** **ではありません... – Romain

+0

そして、FYI:あなたは '.attrbibutes'部分を省略することができます。 'catalog [" ... "]'を使うだけです。クール、そう? :) – jdoe

0

ます。またsendを使用することができます。

catalog.send("catalog_name_#{locale}") 
+0

ありがとう、 'catalog.send(" catalog_name _#{locale} ")' これも機能します。 –