我在 rails 中使用 simple-form,我想知道是否有办法改变集合对象的显示方式。例如我有这样的东西
<%= f.input :lang, :label => "Language", :collection => [ "en", "es, "zh", "fr" ] %>
而不是显示为“en es zh”等,我希望它向用户显示为“英语西班牙语”等。反正有做那种事吗?
提前致谢。
我在 rails 中使用 simple-form,我想知道是否有办法改变集合对象的显示方式。例如我有这样的东西
<%= f.input :lang, :label => "Language", :collection => [ "en", "es, "zh", "fr" ] %>
而不是显示为“en es zh”等,我希望它向用户显示为“英语西班牙语”等。反正有做那种事吗?
提前致谢。
您也可以使用以下方式:
在模型中:
LANGUAGES = {'English' => 'en','French' => 'fr'}
在视图中:
<%= f.input :lang, :label => "Language", :collection => Model::LANGUAGES %>
我猜标签是“English”,值是“en”;你可以这样做:
将数据存储在模型中(推荐)或进行哈希:
@data = Language.all
在视图中使用label_method和value_method:
<%= f.input :lang, :label => "Language", :collection => @data, :label_method => :name, :value_method => :value %>
另一种选择是添加一个助手
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
<%= f.input :lang, label: "Language", collection: [ [ "English", "en" ], [ "Spanish", "es" ], [ "French", "fr" ] ] %>
这在上面有效,使用嵌套数组。此外,它以最新的导轨和简单的形式使用。
我的方法是将整个集合放在语言环境 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) %>