1

私のRailsアプリケーションは現在、collection_selectを使用して、ドロップダウンなどのルックアップ値を選択します。これには、次の2つの利点があります。

  1. 値は一貫しています
  2. 選択した値のIDは、テキスト値ではなくデータベースに保存されます

例:edit.html.erb

<div class="field">
  <%= f.label :course_type %><br />
  <%= f.collection_select :course_type, Lookup.find(:all,:conditions => ["model_name = 'course' and field_name = 'course_type'"]), :id, :lookup_text, include_blank: false,:prompt => "Course Type" %>
</div>

course_controller.rb

private
  def get_lookups
    @course = Course.find(params[:id])
    @course_type = Lookup.find(@course.course_type).lookup_text

show.html.erb

<b>Course type:</b>
<%= @course_type %>

私のアプリケーションは多言語になり、Railsはロケールファイルを使用してこれを処理します。

問題は次のとおりです。モデル/テーブルではなくymlファイルからルックアップ値を入力することは可能(そして賢明)であり、これを複数の言語を処理するように簡単に拡張できますか?上記のコードをymlベースのコードに置き換えるにはどうすればよいですか?

4

3 に答える 3

6

1つの解決策は、おそらくTraco libを使用して、翻訳をDBに保持することです。私はそれがで動作すると思いcollection_selectます。

翻訳YMLファイルからオプションを取得したい場合は、をお勧めしoptions_for_selectます。全体として、次のようなものです。

en.yml

en:
  my_options:
    one: "Option 1"
    two: "Option 2"

意見:

select_tag :foo, options_for_select(t("my_options").invert)

Rails i18nは、「my_options」のような非リーフキーを変換する場合にハッシュを提供します。invertなぜなら、値の前にテキストが必要options_for_selectであり、変換ハッシュはその逆であるためです。

于 2012-11-27T19:36:11.100 に答える
1

を翻訳するには、YAMLファイルから翻訳を返すcollection_select新しいモデルメソッド(たとえば、 "")を作成するだけです。name_translated

意見:

<%= f.collection_select :product_id, Product.all, :id, :name_translated %>

モデル:

class Product < ActiveRecord::Base
  def name_translated
    I18n.t(name)
  end
end

YAMLファイル:

en:
  name1: "Hammer"
  name2: "Plastic sheets"
  name3: "Duct tape"
于 2015-01-08T17:55:33.590 に答える
0

私はselectを使用します:

<%= f.select :role, MAIN_CONFIG['manager_roles'].map { |s| [s.last, s.first] }, selected: @manager.role %>

そして私のyamlファイルmain_config.yml:

manager_roles:
  admin: 'Суперадмин'
  partner_admin: 'Администратор'
  manager: 'Менеджер'
于 2016-07-08T08:45:59.967 に答える