Доступ к "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
опция может быть полезна; в противном случае атрибут чтения / записи, вероятно, в порядке.