Ruby on rails Rails API中POST中的接收阵列

Ruby on rails Rails API中POST中的接收阵列,ruby-on-rails,ruby,ruby-on-rails-3,Ruby On Rails,Ruby,Ruby On Rails 3,我正在创建一个Rails API,并试图通过post请求接收一个数组。关于邮递员,我的要求是: { "user": { "email": "testuser2@gmail.com", "first_name": "Joao Paulo", "last_name": "Furtado Silva", "city_id": 384, "province_id": 2, "cuisines": [1

我正在创建一个Rails API,并试图通过post请求接收一个数组。关于邮递员,我的要求是:

{
    "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
和在用户控制器上:

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

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

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

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

您可以在此处查看答案及更多详细信息,以声明params中的值必须是允许的标量值数组,并将键映射到空数组:

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

如果您使用的是邮递员,则可以在此处查看包含更多详细信息的答案,然后尝试将其与表单数据一起发送 请检查下面的图片

在您的许可方法中,请将菜系添加为数组

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

如果您使用的是邮递员,那么请尝试将其与表单数据一起发送 请检查下面的图片

在您的许可方法中,请将菜系添加为数组

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

cuisines
的数据类型是什么?它是一个数组,但rails似乎没有意识到它需要发送
“cuisines[]”:[17,5,2],
。让我知道它是否工作仍然是同一个错误:{“状态”:“错误”,“消息”:[“菜系不能为空”}我添加了我的答案,请检查它,让我知道它是否工作。
Cuisines
列的数据类型是什么?它是一个数组,但rails似乎没有意识到用
“菜系[]”:[17,5,2],
。让我知道它是否正常工作仍然是相同的错误:{“状态”:“错误”,“消息”:[“菜系不能为空”]}我添加了我的答案,请检查它并让我知道它是否有效,如果我从用户模型上的验证部分删除:美食验证:名字,:姓氏,:城市id,:省id,:密码,:密码确认,:状态=>trueOk,如果我从用户模型上的验证部分删除:美食,这很好ser模型验证:名字、姓氏、城市id、省id、密码、密码确认、状态=>true