【问题标题】:Receiving array in POST in Rails API在 Rails API 的 POST 中接收数组
【发布时间】:2018-10-31 17:56:07
【问题描述】:

我正在创建 Rails API,并尝试通过发布请求接收数组。在 POSTMAN 上,我的要求是:

{
    "user": {
        "email": "testuser2@gmail.com",
        "first_name": "Joao Paulo",
        "last_name": "Furtado Silva",
        "city_id": 384,
        "province_id": 2,
        "cuisines": [17,5,2],
        "password":"123456",
        "password_confirmation":"123456"
    }
}

关于用户模型:

validates :first_name, :last_name, :city_id, :province_id, :cuisines, :password, :password_confirmation, :presence => true

在 User_controller 上:

def user_params
  params.require(:user).permit(:email, :first_name, :last_name, :city_id, :province_id, :password, :password_confirmation, :cuisines)
end

即使我将美食数组传递给后端,Rails 也无法识别它。它显示为 API 响应:

{
  "status": "Error",
  "message": [
    "Cuisines can't be blank"
  ]
}

我在这里做错了什么?

如果我从验证中删除:cuisines,它可以正常工作。但我不应该这样做。解决此问题的最佳方法是什么?

目前的解决方案:

我从 Rails 中删除了 :cuisines 自动验证,并使用如下简单代码手动验证:

#validate cuisines
@cuisines = params.require(:user)[:cuisines] #it comes in array format

if @cuisines.empty?
  render json: {
    status: 'Error',
    message: 'User cuisines are empty',
  }, status: :precondition_failed

  return false
end

如果有人有更好的解决方案,请发布。

【问题讨论】:

  • cuisines 列的数据类型是什么?
  • 它是一个数组,但 rails 似乎无法识别它
  • 尝试使用"cuisines[]": [17,5,2], 发送。让我知道它是否有效
  • 还是同样的错误:{ "status": "Error", "message": [ "Cuisines can't be blank" ] }
  • 我添加了我的答案,请检查并告诉我它是否有效

标签: ruby-on-rails ruby ruby-on-rails-3


【解决方案1】:

要声明 params 中的值必须是允许的标量值数组,请将键映射到空数组:

def user_params
  params.require(:user).permit(:email, :first_name, :last_name, 
  :city_id, :province_id, :password, :password_confirmation, :cuisines => [])
end

你可以在这里how to permit an array with strong parameters看到更多细节的答案

【讨论】:

  • 好的,如果我从用户模型上的验证部分中删除 :cuisines 则效果很好
  • 验证 :first_name, :last_name,:city_id, :province_id, :password,:password_confirmation, :presence => true
【解决方案2】:

如果您使用的是 POSTMAN,请尝试使用表单数据发送它 请看下图

请在您的许可方法中将美食添加为数组

 params.require(:user).permit(:email, :first_name, :last_name, 
  :city_id, :province_id, :password, :password_confirmation, :cuisines => [])

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-10-20
    • 1970-01-01
    • 2016-06-15
    • 1970-01-01
    • 2011-02-13
    • 1970-01-01
    • 2010-10-07
    • 1970-01-01
    相关资源
    最近更新 更多