13

Railsでsimple-formを使用していますが、コレクションオブジェクトの表示方法を変更する方法があるかどうかを知りたいです。たとえば、私はこのようなものを持っています

<%= f.input :lang, :label => "Language", :collection => [ "en", "es, "zh", "fr" ] %>

「eneszh」などとして表示するのではなく、「英語スペイン語」などとしてユーザーに表示したいと思います。とにかくそのようなことをすることはありますか?

前もって感謝します。

4

5 に答える 5

19

次の方法も使用できます。

モデル内:

    LANGUAGES = {'English' => 'en','French' => 'fr'}

ビューで:

    <%= f.input :lang, :label => "Language", :collection => Model::LANGUAGES %>
于 2012-12-02T18:28:05.010 に答える
0

別のオプションは、ヘルパーを追加することです

def languages_display
  [
    ["English", "en"],
    ["Spanish", "sn"],
    ["French", "fr"],
  ]
end

次に、入力フィールドからヘルパーを呼び出します。

<%= f.input :state, :collection => languages_display %>

次に、ショービューで次のヘルパーを呼び出して、db にある en ではなく英語を表示することができます。

def show_language(language)
  {
    "en" => 'English',
    "sp" => 'Spanish',
    "fr" => 'French'
  }[language]
end
于 2012-12-02T16:09:33.543 に答える
0

ラベルは「English」、値は「en」になると思います。次のようなことができます:

データをモデルに保存する (推奨) か、ハッシュを作成します。

@data = Language.all

ビューでlabel_methodvalue_methodを使用します。

<%= f.input :lang, :label => "Language", :collection => @data, :label_method => :name, :value_method => :value %>

https://github.com/plataformatec/simple_formのコレクションのセクションを確認してください

于 2012-12-02T05:07:15.470 に答える
-1

私のアプローチは、コレクション全体をロケール yml ファイル (en.yml) に入れることです。

#RAILSROOT/locales/en.yml
en:
  collections:
    languages: 
      - - en
        - English
      - - de
        - Deutch

ビューでは、次のように記述します。

<%= f.input :lang, :label => "Language", :collection => t("collections.languages") %>

私はこれをたくさん使っているので、I18n を拡張するヘルパー関数 ( https://github.com/rstgroup/i18n-structure ) を使って gem を書きました。

<%= f.input :lang, :label => "Language", :collection => tc(:languages) %>
于 2014-10-14T12:37:43.613 に答える