将 globalize_accessor 区域设置限制为来自 controller/view 的参数
Limit globalize_accessor locales to arguments from controller/view
我正在使用 globalize_accessor gem 呈现一个为 :name
字段提供多语言输入的表单,并希望限制用户可以输入的语言哪些语言已作为参数传递给 globalize_attribute_names
方法。这样的事情可能吗?
这是我目前的情况:
chart.rb
class Chart < ActiveRecord::Base
belongs_to :chart_type
belongs_to :section
has_many :data_points, dependent: :destroy
translates :name
globalize_accessors :attributes => [:name]
validates :name, presence: true
accepts_nested_attributes_for :data_points
end
charts/new.html.haml
= simple_form_for chart, html: {multipart: true} do |f|
- Chart.globalize_attribute_names.each do |lang|
= f.input lang
= f.input :chart_type, collection: @chart_types
= f.input :section, collection: @sections, label_method: :heading
= f.simple_fields_for :data_points, chart.data_points.build do |c|
= c.input :file, as: :file
= f.submit
更新
据我所知,为翻译定义语言环境的唯一方法是在模型级别显式传递它们。但是,当尝试使用一种方法来定义这些时,我看到一个未定义的局部变量或方法错误。我目前使用的方法是用于实验,理想的用例是此方法调用图表的父级和 return 它可接受的语言。这是更新后的代码:
class Chart < ActiveRecord::Base
belongs_to :chart_type
belongs_to :section
has_many :data_points, dependent: :destroy
translates :name
globalize_accessors :attributes => [:name], locales: languages
validates :name, presence: true
accepts_nested_attributes_for :data_points
def self.languages
[:en, :fr]
end
您看到未定义的局部变量或方法错误,因为您在 class 中使用 languages
之后定义方法。只需在 globalize_accessors
调用上方定义方法,您应该没问题:
class Chart < ActiveRecord::Base
...
def self.languages # <= define this first
[:en, :fr]
end
globalize_accessors :attributes => [:name], locales: languages
我正在使用 globalize_accessor gem 呈现一个为 :name
字段提供多语言输入的表单,并希望限制用户可以输入的语言哪些语言已作为参数传递给 globalize_attribute_names
方法。这样的事情可能吗?
这是我目前的情况:
chart.rb
class Chart < ActiveRecord::Base
belongs_to :chart_type
belongs_to :section
has_many :data_points, dependent: :destroy
translates :name
globalize_accessors :attributes => [:name]
validates :name, presence: true
accepts_nested_attributes_for :data_points
end
charts/new.html.haml
= simple_form_for chart, html: {multipart: true} do |f|
- Chart.globalize_attribute_names.each do |lang|
= f.input lang
= f.input :chart_type, collection: @chart_types
= f.input :section, collection: @sections, label_method: :heading
= f.simple_fields_for :data_points, chart.data_points.build do |c|
= c.input :file, as: :file
= f.submit
更新
据我所知,为翻译定义语言环境的唯一方法是在模型级别显式传递它们。但是,当尝试使用一种方法来定义这些时,我看到一个未定义的局部变量或方法错误。我目前使用的方法是用于实验,理想的用例是此方法调用图表的父级和 return 它可接受的语言。这是更新后的代码:
class Chart < ActiveRecord::Base
belongs_to :chart_type
belongs_to :section
has_many :data_points, dependent: :destroy
translates :name
globalize_accessors :attributes => [:name], locales: languages
validates :name, presence: true
accepts_nested_attributes_for :data_points
def self.languages
[:en, :fr]
end
您看到未定义的局部变量或方法错误,因为您在 class 中使用 languages
之后定义方法。只需在 globalize_accessors
调用上方定义方法,您应该没问题:
class Chart < ActiveRecord::Base
...
def self.languages # <= define this first
[:en, :fr]
end
globalize_accessors :attributes => [:name], locales: languages