Ответы пользователя по тегу Ruby
  • PostgreSQL, как реализовать I18n используя hstore?

    @xtsidx Автор вопроса
    Разобрался сам с задачей.

    Вот простенький плагин реализующий то, что мне нужно.
    module Sequel
    	module Plugins
    		module I18nModel
    
    			def self.apply(model, opts={})
    				model.instance_eval do
    					@i18n_columns = opts[:i18n_columns]
    				end
    			end
    			
    			module ClassMethods
    			
    				def i18n(options = {})
    					locales = options[:locales].clone
    					locales << :locale
    					locales = locales.pg_array
    					ds = select
    					@i18n_columns.each do|c|
    						ds = ds.select_append(Sequel.lit("(array_remove(? -> ?, NULL))[1]", c, locales).as(c))
    					end
    					return ds
    				end
    			
    			end
    			
    		end
    	end
    end


    Для модели нужно будет вызвать метод i18n, в парамере locale передать массив локалей по приоритету. Всё за один запрос.
    Ответ написан
    Комментировать