0

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
4

1 に答える 1

1

languages クラスでメソッドを使用した後にメソッドを定義しているため、未定義のローカル変数またはメソッド エラーが表示されます。呼び出しの上にメソッドを定義するだけglobalize_accessorsで問題ありません。

class Chart < ActiveRecord::Base

  ...

  def self.languages # <= define this first
    [:en, :fr]
  end

  globalize_accessors :attributes => [:name], locales: languages
于 2016-09-30T23:41:48.213 に答える