Доступ к "real_field_non_translated"? - мобильность

Есть ли способ через ActiveRecord получить доступ к "реальному полю" (скажем)?

Например. Если у меня есть модельная компания и я делаю Company.create(name: "My Company Name")I18n.locale = :en), это значение имени не будет сохранено в записи компании, но в таблице Mobility для строки.

Так делаю Company.last вернусь

#<Company id: 5, name: nil>

Но делать Company.last.name вернет название моей компании (при условии, что локаль установлена ​​правильно)

Есть ли способ сделать что-то вроде Company.last.real_name что даст мне реальную стоимость записи? В этом случае ноль. Я также хотел бы иметь real_name=,

мобильность (0.4.2) i18n (> = 0.6.10, <0.10) request_store (~> 1.0)

Backend: key_value

2 ответа

Решение

Попробуй это:

Company.last.read_attribute :name

Или это:

Company.last.name_before_type_cast

Принятый ответ является правильным как общий подход с любой моделью ActiveRecord: read_attribute а также write_attribute всегда извлекает и устанавливает значение столбца независимо от переопределений, определенных в модели. Как я уже говорил, для этих методов также есть краткие описания:

company[:name]         #=> returns the value of the name column
company[:name] = "foo" #=> sets the value of the name column to "foo"

Кроме того, в частности, в Mobility, есть опция, которую вы можете передать получателю (и установщику), который пропустит то, что Mobility обычно делает для атрибута:

company.name(super: true) # skips Mobility and goes to its parent (super) method,
                          # which would typically be the column value.

В ситуации, когда, возможно, вы используете другой драгоценный камень, который также делает что-то особенное для атрибутов, этот подход может работать лучше.

Существует также опция установки, однако использовать ее немного сложнее:

company.send(:name=, "foo", super: true) # sets name to "foo", skipping Mobility

Если вы используете Mobility вместе с другим гемом, который переопределяет атрибуты getter и / или setters, то super опция может быть полезна; в противном случае атрибут чтения / записи, вероятно, в порядке.

Другие вопросы по тегам