Module: Mobility::Backends::Table
- Included in:
- ActiveRecord::Table, Sequel::Table
- Defined in:
- lib/mobility/backends/table.rb
Overview
Stores attribute translation as rows on a model-specific translation table (similar to Globalize). By default, the table name for a model Post
with table posts
will be post_translations
, and the translation class will be Post::Translation
. The translation class is dynamically created when the backend is initialized on the model class, and subclasses ActiveRecord::Table::Translation (for AR models) or inherits Sequel::Table::Translation (for Sequel models).
The backend expects the translations table (post_translations
) to have:
-
a string column named
locale
to store the locale of the translation -
columns for each translated attribute that uses the table (in general, this will be all attributes of the model)
-
an integer column with name
post_id
(wherepost
is the name of the model class)
If you are using Rails, you can use the mobility:translations
generator to create a migration generating this table with:
rails generate mobility:translations post title:string content:text
Unlike Globalize, attributes need not all be on one table. Mobility supports any number of translation tables for a given model class (all of the structure described above), provided the association_name
option is different for each. Some translations can be stored on one translation table, others on another, and Mobility will handle mapping reads/writes to each. The subclass used in this case will be generated from the association_name
by singularizing it and converting it to camelcase.
For more details, see examples in ActiveRecord::Table.
Backend Options
association_name
Name of association on model. Defaults to :translations
. If specified, ensure name does not overlap with other methods on model or with the association name used by other backends on model (otherwise one will overwrite the other).
table_name
Name of translations table. By default, if the table used by the model is posts
, the table name used for translations will be post_translations
.
foreign_key
Foreign key to use in defining the association on the model. By default, if the model is a Post
, this will be post_id
. Generally this does not need to be set.
subclass_name
Subclass to use when dynamically generating translation class for model, by default :Translation
. Should be a symbol. Generally this does not need to be set.
Defined Under Namespace
Modules: Cache, ClassMethods
Backend Accessors collapse
-
#read(locale, **options) ⇒ Object
Gets the translated value for provided locale from configured backend.
-
#write(locale, value, **options) ⇒ Object
Updates translation for provided locale without calling backend’s methods to persist the changes.
Instance Method Summary collapse
-
#association_name ⇒ Symbol
Returns the name of the translations association.
-
#each_locale {|Locale| ... } ⇒ Object
Yields locales available for this attribute.
-
#foreign_key ⇒ Symbol
Returns foreign_key for translations association.
-
#subclass_name ⇒ Symbol
Returns translation subclass under model class namespace.
-
#table_name ⇒ Symbol
Returns name of table where translations are stored.
Instance Method Details
#association_name ⇒ Symbol
Returns the name of the translations association.
|
# File 'lib/mobility/backends/table.rb', line 69
|
#each_locale {|Locale| ... } ⇒ Object
Yields locales available for this attribute.
98 99 100 |
# File 'lib/mobility/backends/table.rb', line 98 def each_locale translations.each { |t| yield t.locale.to_sym } end |
#foreign_key ⇒ Symbol
Returns foreign_key for translations association.
|
# File 'lib/mobility/backends/table.rb', line 77
|
#read(locale, **options) ⇒ Object
Gets the translated value for provided locale from configured backend.
87 88 89 |
# File 'lib/mobility/backends/table.rb', line 87 def read(locale, **) translation_for(locale, **).send(attribute) end |
#subclass_name ⇒ Symbol
Returns translation subclass under model class namespace.
|
# File 'lib/mobility/backends/table.rb', line 73
|
#table_name ⇒ Symbol
Returns name of table where translations are stored.
|
# File 'lib/mobility/backends/table.rb', line 81
|
#write(locale, value, **options) ⇒ Object
Updates translation for provided locale without calling backend’s methods to persist the changes.
92 93 94 |
# File 'lib/mobility/backends/table.rb', line 92 def write(locale, value, **) translation_for(locale, **).send("#{attribute}=", value) end |