Rails 5.2
SimpleForm
我正在查看sample-form_bootstrap的源代码,以了解有关Rails的更多信息。
在en.yml文件中,我看到:
simple_form:
labels:
user:
email: Email
first_kiss: First kiss
hints:
user:
name: Text input example
email: We'll never share your email with anyone else.
password: Password input example
color: Collection as inline radio buttons example
fruit: Collection as inline check boxes example
options:
user:
color:
red: Red
pink: Pink
violet: Violet
indigo: Indigo
blue: Blue
teal: Teal
green: Green
yellow: Yellow
fruit:
apple: Apple
banana: Banana
cherry: Cherry
coconut: Coconut
grape: Grape
lime: Lime
mango: Mango
orange: Orange
pear: Pear
pineapple: Pineapple
如果我这样做:
User::COLOR
我得到:
[:red, :pink, :violet, :indigo, :blue, :teal, :green, :yellow]
但是,如果我尝试类似的操作:
SimpleForm::LABELS
我收到未初始化的常量错误SimpleForm :: LABELS
从我的观点(尤其是集合)来看,如何从en.ym调用常量的规则是什么?
答案 0 :(得分:1)
假设您具有以下en.yml
结构:
en:
simple_form:
options:
user:
role:
admin: 'Administrator'
editor: 'Editor'
对于收藏集,您可以使用此f.input :role, collection: [:admin, :editor]
。 SimpleForm#I18n
此外,您可以直接解析YML
。
require 'yaml'
thing = YAML.load_file('en.yml') # Assuming your en.yml file here.
puts thing["simple_form"]["labels"]
答案 1 :(得分:1)
我签出了SimpleForm文档,实际上User::COLOR
在user
模型中是一个常量,而不是从en
加载。
您会得到未初始化的常量错误SimpleForm :: LABELS ,因为上面没有定义常量。
如果要将它们定义为常量并在视图中使用它们,可以执行以下操作:
在app_config.rb
中,首先像这样读取en.yml
文件
info = Rails.root.to_s + '/config/locales/en.yml'
data = YAML.load_file(info).deep_symbolize_keys!
然后定义一个类似下面的常量
LABELS = data[:simple_form][:labels]
以便您可以在整个应用程序中标记常量。