Я создал миграцию, которая добавила новый столбец в одну из наших таблиц / моделей (cloud_photo_url
). Однако API не выдает значение, когда я пытаюсь его отобразить ... Я также заметил, что другие также отсутствуют.
Я не мог понять, как я могу получить в выводе json значение из cloud_photo_url
. Чтобы было ясно, оно сохраняется в базе данных, но по какой-то причине API не возвращает значение. Если я изменю или обновлю другие значения (например, first_name
или last_name
), эти изменения будут отражены в ответе json.
дб / схема:
Column | Type | Modifiers
-----------------+-----------------------------+-------------------------------------------------------
id | uuid | not null default shared_extensions.uuid_generate_v4()
last_seen_at | timestamp without time zone |
auth_token | character varying |
created_at | timestamp without time zone | not null
updated_at | timestamp without time zone | not null
first_name | character varying |
last_name | character varying |
email | character varying |
birthday | date |
provider_id | character varying |
password_digest | character varying |
gender | integer | default 0
verified | boolean | default false
photo | character varying |
provider | integer | default 0
cloud_photo_url | character varying |
код рубина:
@user = User.find(params[:id])
render json: @user
вывод json из конечной точки API:
{
"user": {
"id": "8c29a48e-c2c2-4374-b8e6-f9d7c6970a9a",
"auth_token": "WH4fveVNa1vANgD6LKbVJPL2",
"provider": "guest",
"provider_id": "111959522860722",
"first_name": "miguel",
"last_name": "martin",
"email": "a@b.com",
"verified": false,
"gender": "unknown",
"birthday": null,
"photo": null,
"pois": []
}
}
Редактировать 1:
• согласно комментариям, puts @user.to_json
работает с полным содержимым БД.
• да, я уверен, что значения сохраняются в БД. Я также уверен, что маршрут правильный (как я указал в своем вопросе, если я обновлю другие отображаемые значения, они также обновятся в ответе).
• Я бы согласился, что, кажется, что-то мешает render :json
, но я не могу понять, что именно. Я искал файлы .rabl
, но ничего не было найдено.
• использование render inline: @user.to_json, content_type: "application/json"
делает меня довольно близким ... JSON просто немного искажен (не полностью инкапсулирован) ... однако я бы предпочел исправить это "правильным образом".
Будет полезна любая дополнительная помощь по настройке того, что может повлиять на этот маршрут / рендер / модель / контроллер.
Редактировать 2:
Моя модель была запрошена, вот она:
class User < ApplicationRecord
attr_accessor :updating_password
mount_uploader :photo, UserPhotoUploader
has_secure_password validations: false
has_secure_token :auth_token
enum gender: { unknown: 0, female: 1, male: 2 }, _prefix: true
enum platform: { ios: 0, android: 1 }
enum provider: { guest: 0, email: 1, facebook: 2 }, _prefix: true
has_many :comments, dependent: :destroy
has_many :enters, dependent: :destroy
has_many :pois, through: :subscriptions
has_many :subscriptions, dependent: :destroy
has_many :devices, dependent: :destroy
has_many :outgoing_messages, class_name: 'MessageQueue', dependent: :destroy
has_many :user_messages, dependent: :destroy
has_many :messages, through: :user_messages, source: :user
validates_associated :devices
validates :provider_id, presence: true, if: :provider_requires_id
validates :first_name, presence: true, unless: :provider_is_guest
validates :last_name, presence: true, unless: :provider_is_guest
validates :email,
presence: true,
uniqueness: { case_sensitive: false },
format: { with: REGEX_EMAIL, message: 'Invalid email address' },
unless: :provider_is_guest
validates :password, length: { minimum: 6, maximum: 128, message: 'must be greater than 5 characters' }, if: :setting_password?
validates :provider_id, uniqueness: {
scope: [:provider],
message: 'Provider ID already exists'
}, if: :provider_requires_id
def gender=(g)
g.try(:downcase!)
gender = g.blank? ? 0 : g
super(gender)
end
# IF not guest or email account then it requires a provider ID
def provider_requires_id
!['guest', 'email'].include?(self.provider)
end
def provider_is_guest
provider_guest?
end
def setting_password?
(self.provider_email? && new_record?) || updating_password
end
def name
provider_guest? ? "Guest User" : "#{first_name} #{last_name}"
end
def send_email_verification
UserVerificationMailer.perform_later(current_tenant, self)
end
def send_password_reset
UserPasswordResetMailer.perform_later(current_tenant, self)
end
end