Доступ к полям JSONB как к обычным атрибутам ActiveRecord - PullRequest
2 голосов
/ 03 апреля 2019

У меня есть столбец в моей модели. Пользователь назвал свойства jsonb. Поскольку у меня есть требование для пользовательских динамических полей.

Как бы вы получили доступ к атрибутам, как если бы они были обычными отображаемыми столбцами

например Модель пользователя имеет столбец с именем first_name, но свойство в свойствах называется eye_color

user = User.find(1)
user.first_name # => "john"
# to access the eye color you would do
user.properties['eye_color'] # => "green"

Что я хотел бы сделать, так это уметь вызывать атрибут json карты, чтобы я мог установить и получить его, как показано ниже

user.eye_color = 'green'

Это необходимо сделать динамически, так как атрибуты поля могут измениться. Однако в пользовательском экземпляре я вижу, как будут работать все атрибуты.

1 Ответ

1 голос
/ 03 апреля 2019

Возможно попробуйте переопределить method_missing на User модели

def method_missing(method, *args, &block)
  clean_method = method.to_s.chomp('=')

  if properties.key?(clean_method)
    if method.to_s.ends_with?('=')
      return properties[clean_method] = args.first
    else
      return properties[clean_method]
    end
  end

  super
end

Это должно позволить вам получить и установить напрямую

# set value
user.eye_color = 'green'

# get value
user.eye_color # => returns 'green'
...