动态列名称

时间:2012-05-08 07:16:59

标签: ruby-on-rails

我尝试使用区域设置:

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 中,我添加了以下代码:

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

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

在html页面中,我只看到“catalog.catalog_name_en”,而不是列catalog_name_en的值。 帮我PLZ。

2 个答案:

答案 0 :(得分:6)

您可以尝试使用:

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

或更短但相当(如评论中所述):

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

答案 1 :(得分:1)

您还可以使用send

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