Подтвердить что ты не робот

Как извлечь все атрибуты с помощью Rails Jbuilder?

Мне больно писать такие коды, как это все время в шаблоне jbuilder.json:

json.extract! notification, :id, :user_id, :notice_type, :message, :resource_type, :resource_id, :unread, :created_at, :updated_at

Поэтому я хотел бы написать код следующим образом:

json.extract_all! notification

Я нашел, что могу сделать это как следующие коды, но они все еще немного длинны для меня.

notification.attributes.each do |key, value|
  json.set!(key, value)
end

Есть ли лучший способ?

4b9b3361

Ответ 2

Я использую jbuilder 1.5.0 и сливаюсь! не работает, но я нашел альтернативный синтаксис:

json.(notification, *notification.attributes.keys)

Ответ 3

Добавление большего количества ответов @uiureo

Предположим, что в вашем уведомлении есть некоторые типы загрузчиков изображений (например, wavewave, paperclip)

Затем ниже версия не вернет вам объект uploader, так как вы можете получить URL-адрес изображения?

json.merge! notification.attributes

notification.attributes представляет собой хеш-преобразование объекта, оно возвращает значение столбца загруженного сервера, но не URL-адрес.

ответ образца

notification: Object {
   title: "hellow world"
   img: "sample.png"
}

Вместо этого попробуйте

json.merge! notification.as_json

Это вернет установленный столбец в качестве другого объекта, в который вы можете запросить URL-адрес.

ответ образца

notification: Object {
   title: "hellow world"
   img: Object {
       url: "https://www.example.com/sample.png"
   }
}

Ответ 5

В случае, если вы хотите исключить любой из атрибутов. Пример: created_at и updated_at

json.merge! notification.attributes.reject{ |key, _| key.in?(['created_at', 'updated_at']) }

Ответ 6

Вот как я это делаю

json.property  do
  Property.column_names.each do |name|
     json.set! name, @property.try(name)
  end

  # has_ones:
  json.contact @property.contact
end

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