2012-05-08 2 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; 뷰에서 catalog_name_ro 및 catalog_name_ru

list.html.erb이 코드 추가 : 만 "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 %> 

을하지만, 열 catalog_name_en에 대한 값이 아니라 . PLZ에 도와주세요.

+0

저는 믿습니다 당신은 지금 받아 들여지는 것처럼 하나의 대답을 표시 ("체크 표시"사용)해야합니다. – Romain

답변

5

다음을 사용하여 시도 할 수 있습니다 : (주석에서 언급 한 바와 같이)

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

또는 짧은,하지만 동등한 :

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

밑줄 치기'catalog_name _ # {locale}';) – jdoe

+0

@jdoe 그에 따라 수정 된 답변. 하지만 OP의 샘플 코드에서 밑줄은 ** 아닙니다 ** – Romain

+0

FYI :'.attrbibutes' 부분은 생략 할 수 있습니다. 그냥 사용 :'카탈로그 [ "..."]'. 좋아, 응? :) – jdoe

0

또한 send를 사용할 수 있습니다

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

감사합니다. 'catalog.send (catalog_name _ # {locale}') ' 감사합니다. –