gpt4 book ai didi

ruby-on-rails - 将键值对存储在 YAML 中并用于填充 Rails 表单 :collection?

转载 作者:行者123 更新时间:2023-12-04 04:55:31 25 4
gpt4 key购买 nike

如何将带有语言代码的语言列表存储到 yaml 中并以 rails 形式弹出一个 :collection ?我现在有下面的例子但失败了,关于解决这个问题的最佳选择有什么建议吗?

应用程序.yml:

development:
language: [['English', 'en'], ['French', 'fr']]

production:
language: [['English', 'en']

rails 形式:
= f.input :locale, :collection => APP_CONFIG['languages']

最佳答案

出于某种原因,我从未想过在 i18n YAML 文件中存储比字符串更复杂的数据结构,但是您的问题让我深思在这种情况下改变我的方式,所以非常感谢您(和 +1)!

我最初在我的 ApplicationHelper 中有一个类似于@Sachin R 的解决方案的方法。 (虽然与特定的 Rails 环境无关)像这样:

app/helpers/application_helper.rb

def locale_language_labels
[
{ label: t('layouts.locale_selector.en'), locale: 'en' },
{ label: t('layouts.locale_selector.it'), locale: 'it' },
{ label: t('layouts.locale_selector.ja'), locale: 'ja' }
]
end

它提取了以下值(当然取决于语言环境):

配置/语言环境/布局/layouts_en.yml
en:
layouts:
locale_selector:
en: English
it: Italiano (Italian)
ja: 日本語 (Japanese)

我的语言环境选择器(Twitter Bootstrap 格式)然后会像这样填充这些值:

app/views/layouts/_locale_selector.html.haml
%li#fat-menu.dropdown
%a.dropdown-toggle{"data-toggle" => "dropdown", href: "#"}
%i.icon-globe
= t('.language')
%b.caret
%ul.dropdown-menu
- locale_language_labels.each do |language|
%li
= link_to language[:label],
controller: controller,
action: action,
set_locale: language[:locale],
page: page

现在,我已经摆脱了 locale_language_labels方法并将我的区域设置选择器语言放在 YAML 文件中的散列中,这可能是您的问题的一个很好的候选者。我的代码现在如下所示:

配置/语言环境/布局/layouts_en.yml
en:
layouts:
locale_selector:
language: Language
language_labels: { en: English,
it: Italiano (Italian),
ja: 日本語 (Japanese) }

app/views/layouts/_locale_selector.html.haml
%li#fat-menu.dropdown
%a.dropdown-toggle{"data-toggle" => "dropdown", href: "#"}
%i.icon-globe
= t('.language')
%b.caret
%ul.dropdown-menu
- t('.language_labels').each_pair do |locale, label|
%li
= link_to label,
controller: controller,
action: action,
set_locale: locale,
page: page

将语言标签与 YAML 文件中的语言环境配对对我来说更有意义,因为它们是紧密耦合的一对,现在在 YAML 中定义一半而在助手中定义另一半似乎并不自然。

关于ruby-on-rails - 将键值对存储在 YAML 中并用于填充 Rails 表单 :collection?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16812320/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com