Не могу вьехать как заставить define_method работать:
Mongoid,
используются localized_fields
Всё хорошо, но в некоторых вопросах жутко неудобно работать:
Например, чтобы явно получить русскую версию поля name - мне нужно стучаться в name_translations[:ru] - что дико неудобно,
Или-же заниматься постоянным переключением локалей, например так:
curr = I18.locale
I18n.locale = :en
Model.name
I18n.locale = curr
Которое, кстати, не гарантирует что будет именно русская версия поля. В принципе это то ещё развлечение.
Пока-что количество localized-полей конечное, в принципе можно сделать просто
def name__ru и def name__ru(value)
Однако хотелось бы добиться чуть чуть другого поведения: Смотрим модель, и для каждого увиденного поля с параметром localized? = true
объявляем по правилам "#{name}__#{loc}" сетер и гетер.
Собственно написал следующий небольшой модуль (тут пока-что только getter).
module My::Localized
module ClassMethods
def params_localized
self.attribute_names.each do |value|
if self.fields[value].localized?
I18n.available_locales.each do |loc|
define_method("#{value}__#{loc}") do
self["#{value}_translations"][loc]
end
end
end
end
end
end
end
Но не могу сообразить - как заставить его работать при подключении в Model...
Сейчас вообще никак не работает...