3

質問の 1 つで特定の言語を選択するフォームを作成しようとしているところです。ここで言語リストの宝石を使用しようとしています: https://github.com/scsmith/language_list。ただし、ドキュメントには、リストを select_tag と組み合わせる方法が実際には示されていません。

<%= form_for users_path, :method => "get" do %>

    <%= label_tag "Select Country" %> <br>
    <%= country_select(:user, :country, [], :include_blank => true) %> <br>

    <%= label_tag "Language spoken" %>
    <%= select_tag "Language", options_from_collection_for_select(LanguageList::COMMON_LANGUAGES, "id", "name") %>

    <%= label_tag "City" %> <br>
    <%= text_field_tag(:city) %>


<% end %>

エラーが表示されます

undefined method 'id' for afr (af) - Afrikaans:LanguageList::LanguageInfo

ライン上

<%= select_tag "Language", options_from_collection_for_select(LanguageList::COMMON_LANGUAGES, "id", "name") %>

誰でも私を助けることができますか?

4

3 に答える 3

5

使用しないでください"id"。ドキュメントには、使用する必要があると書かれていますiso_639_1(またはiso_639_3、3文字のコードが必要な場合)

<%= select_tag "Language", options_from_collection_for_select(LanguageList::COMMON_LANGUAGES, "iso_639_1", "name") %>
于 2012-11-20T00:21:25.043 に答える
1

LanguageList クラスは、名前、型、コードなどの属性を持つ LanguageInfo インスタンスのハッシュを返すようです -- `options_from_collection_for_select' は、最初のパラメーターがコレクション (この場合はハッシュ) であり、2 番目のパラメーターが値を返すメソッドであると想定しています。 3 番目は表示文字列です。

では、誰かが言語を選択すると、データベースに何を保存するのでしょうか? おそらくコードの1つですよね?したがって、これが当てはまる場合、2 番目の引数をコレクションのインスタンスが応答するメソッドにします。これは (gem のソース コードを読み取る) または のいずれiso_639_1iso_639_3です。 nameすでに動作するはずです。

したがってid、これら 2 つの iso_nnn_n 値のいずれかに置き換えると、フォームが表示されます。データベースに言語コードを実際に保存するには、データベースに列が必要ですlanguage

于 2012-11-20T00:34:26.380 に答える