13

我在 rails 中使用 simple-form,我想知道是否有办法改变集合对象的显示方式。例如我有这样的东西

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

而不是显示为“en es zh”等,我希望它向用户显示为“英语西班牙语”等。反正有做那种事吗?

提前致谢。

4

5 回答 5

19

您也可以使用以下方式:

在模型中:

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

在视图中:

    <%= f.input :lang, :label => "Language", :collection => Model::LANGUAGES %>
于 2012-12-02T18:28:05.010 回答
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 回答
0

另一种选择是添加一个助手

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

然后从输入字段调用你的助手:

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

然后在您的显示视图中,您可以调用以下帮助程序,以便它显示英语而不是您在数据库中的 en:

def show_language(language)
  {
    "en" => 'English',
    "sp" => 'Spanish',
    "fr" => 'French'
  }[language]
end
于 2012-12-02T16:09:33.543 回答
0
 <%= f.input :lang, label: "Language", collection: [ [ "English", "en" ], [ "Spanish", "es" ], [ "French", "fr" ] ] %>

这在上面有效,使用嵌套数组。此外,它以最新的导轨和简单的形式使用。

于 2016-08-14T17:18:22.633 回答
-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,并且你可以在 gemfile 中编写 (注意 "tc" 助手)

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