在 Rails 中更改 POST 上的 JSON 属性名称?
Change JSON attribute name on POST in Rails?
所以 Rails-API 应该接受 JSON post for
{
"post": { "users": [{"name": "James"}]}
}
现在的问题是,我正在使用 nested_attributes,在 Post 模型中我有以下行:
`accepts_nested_attributes_for :users`
如何在 POST 中接受属性名称 "users" 而不是 "users_attributes"?
posts_controller.rb
def create
@post = Post.new(post_params)
users = params.values[0].delete(:users_attributes)
params.values[0][:users] = users
if @post.save
render json: @post, status: :created, location: @post
else
render json: @post.errors, status: :unprocessable_entity
end
end
...
def post_params
users = params.values[0].delete(:users_attributes) params.values[0][:users] = users
params.require(:post).permit(:expiration, :users => [:name, :dates], :users_attributes => [:name, :post_id, :dates => []])
end
end
你可以试试这个
假设你的参数是
params = { post: {
name: 'war', users_attributes: [
{ title: 'Ruby documentation browser!' },
{ title: 'the modern citizen' },
{ title: '', destroy: '1' }]}}
users = params.values[0].delete(:users_attributes)
params.values[0][:users] = users
所以 Rails-API 应该接受 JSON post for
{
"post": { "users": [{"name": "James"}]}
}
现在的问题是,我正在使用 nested_attributes,在 Post 模型中我有以下行:
`accepts_nested_attributes_for :users`
如何在 POST 中接受属性名称 "users" 而不是 "users_attributes"?
posts_controller.rb
def create
@post = Post.new(post_params)
users = params.values[0].delete(:users_attributes)
params.values[0][:users] = users
if @post.save
render json: @post, status: :created, location: @post
else
render json: @post.errors, status: :unprocessable_entity
end
end
...
def post_params
users = params.values[0].delete(:users_attributes) params.values[0][:users] = users
params.require(:post).permit(:expiration, :users => [:name, :dates], :users_attributes => [:name, :post_id, :dates => []])
end
end
你可以试试这个
假设你的参数是
params = { post: {
name: 'war', users_attributes: [
{ title: 'Ruby documentation browser!' },
{ title: 'the modern citizen' },
{ title: '', destroy: '1' }]}}
users = params.values[0].delete(:users_attributes)
params.values[0][:users] = users