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
アップデート
私の知る限り、翻訳用のロケールを定義する唯一の方法は、モデル レベルで明示的に渡すことです。ただし、メソッドを使用してこれらを定義しようとすると、未定義のローカル変数またはメソッド エラーが表示されます。私が現在使用しているメソッドは実験用であり、理想的な使用例は、このメソッドが Chart の親を呼び出し、受け入れ可能な言語を返すことです。更新されたコードは次のとおりです。
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