我正在使用.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"
}
]
希望我的解释就足够了。
答案 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
方法