3

我正在尝试创建一个表单,其中一个问题是选择一种特定的语言。我正在尝试在这里使用语言列表宝石: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”期望它的第一个参数是集合(在这种情况下是散列),第二个是返回值的方法您要识别的项目,第三个是显示字符串。

那么当有人选择一种语言时,你打算在数据库中存储什么?可能是其中一个代码,对吧?因此,如果这是真的,您可以将第二个参数设为集合实例将响应的方法,该方法(读取 gem 的源代码)是iso_639_1or iso_639_3name应该已经工作了。

因此,如果您替换id为这两个 iso_nnn_n 值之一,则应显示该表单。要实际将语言代码保存在数据库中,您需要在数据库中为其创建一个列,您可能已经将其作为language.

于 2012-11-20T00:34:26.380 回答
0

有时将 gem 的数据转储存储在数据库中很有意义。

这是 postgresql 和 rails 的示例https://github.com/serghei-topor/import-language-list-into-db-rails-sample

这是 gem 数据转储的 csv 文件https://github.com/serghei-topor/language-list-csv

select_tag 看起来像:

<%= select_tag "Language", options_from_collection_for_select(Language.where(is_common:true).order(:name), "id", "name") %>
于 2018-09-06T23:49:54.223 回答