Select始终返回:id,即使呼叫中未包含它也是如此

时间:2019-02-05 00:49:39

标签: ruby-on-rails ruby select activerecord ruby-on-rails-5

我正在使用.select选择要返回的字段,我指定除:id, :created_at and :updated_at以外的所有字段,无论如何它仍会返回"id": null

我正在使用Ruby on Rails 5构建API,像往常一样,字段:id,:created_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 :(得分:2)

您可以这样做:

render json: address.select(:name, :region, :province).to_json(except: :id)

答案 1 :(得分:1)

如果您不想检索ID,则应使用pluck而不是select

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

这将返回一个没有id的值数组。我假设您也需要列名,在这种情况下,您可以向模型添加方法:

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])
来自https://stackoverflow.com/a/27995494/10987825

pluck_to_hash方法