Ruby on rails Rails API中POST中的接收阵列
我正在创建一个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
{
"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