Выбор всегда возвращает: идентификатор, даже если он не включен в вызов - PullRequest
0 голосов
/ 05 февраля 2019

Я использую .select, чтобы выбрать, какое поле я хочу вернуть, я указываю все поля, кроме :id, :created_at and :updated_at, в любом случае он все равно возвращает "id": null.

Я строюAPI с Ruby on Rails 5, как обычно, поля: id,: creation_at и: updated_at создаются после запуска миграции, где :id - первичный ключ.

Когда я использую address.select(:name, :region, :province)

Я получаю:

[
{
    "id": null,
    "name": "Lorem Ipsum",
    "region": "some text",
    "province": "some more text"
},
{
    "id": null,
    "name": "Lorem Ipsum 1",
    "region": "some text 1",
    "province": "some more text 1"
}
]

Но я ожидаю, что это:

[
{
    "name": "Lorem Ipsum",
    "region": "some text",
    "province": "some more text"
},
{
    "name": "Lorem Ipsum 1",
    "region": "some text 1",
    "province": "some more text 1"
}
]

Надеюсь, моего объяснения было достаточно.

Ответы [ 2 ]

0 голосов
/ 05 февраля 2019

Вы можете сделать:

render json: address.select(:name, :region, :province).to_json(except: :id)
0 голосов
/ 05 февраля 2019

Вы должны использовать pluck вместо select, если вы не хотите получать идентификатор.

Address.pluck(:name, :region, :province)

Это вернет массив значений без идентификатора.Я предполагаю, что вам также нужны имена столбцов, и в этом случае вы можете добавить метод к модели:

def self.pluck_to_hash(keys)
  pluck(*keys).map{|pa| Hash[keys.zip(pa)]}
end

# use it with
Address.pluck_to_hash([:name, :region, :province])

pluck_to_hash метод из https://stackoverflow.com/a/27995494/10987825

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...