2015-10-24 6 views
0

Я использую gemizeize_accessor для рендеринга формы с многоязычными входами для поля :name и хотел бы ограничить языки, которые пользователь может вводить на основании того, какие языки были переданы как аргументы метода globalize_attribute_names. Что-то вроде этого возможно?Ограничить локали globalize_accessor аргументами из контроллера/представления

Вот что я до сих пор:

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 

UPDATE

Насколько мне известно, единственный способ определить локали для перевода, чтобы передать их в явном виде на уровне модели. Однако, пытаясь использовать метод для их определения, я вижу неопределенную локальную ошибку или ошибку метода. Метод, который я использую в настоящее время, предназначен для экспериментов, и в идеальном случае использование этого метода вызовет родительский элемент диаграммы и вернет для него приемлемые языки. Вот обновленный код:

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 

ответ

0

Вы видите неопределенную ошибку локальной переменной или метода, поскольку вы определяете метод languagesпосле использовать его в классе. Просто определите метод, приведенный выше вызова globalize_accessors, и все должно быть хорошо:

class Chart < ActiveRecord::Base 

    ... 

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

    globalize_accessors :attributes => [:name], locales: languages