如何在Rails控制器中更改params方法以接受JSON数组?

时间:2019-07-10 09:24:05

标签: ruby-on-rails

我有一个由rails new my_api --apirails g scaffold model name age构建的基本API。

我想更改model_params方法以接受JSON数组。我怎样才能做到这一点?

当前方法是默认方法:

   def model_params
      params.require(:model).permit(:name, :age)
   end

我尝试过的

我尝试过this

    def model_params
      params.require(:model).permit?([:name, :age])
    end

但我知道

Completed 400 Bad Request in 10ms (ActiveRecord: 10.3ms)



ActionController::ParameterMissing (param is missing or the value is empty: model):

app/controllers/models_controller.rb:83:in `model_params'
app/controllers/models_controller.rb:29:in `create'

注意

我发出的卷曲请求是

curl -H "Accept: application/json" -H "Content-type: application/json" -d '[{"name": "Fred", "age": "5"}, {"name": "Fred", "age": "5"}, {"name": "Fred", "age": "5"}]' "http://localhost:3000/models"

2 个答案:

答案 0 :(得分:0)

您的强参数需要一个名为model的对象,该对象具有键nameage,因此您需要以这种格式制作请求正文。

        { "model" : { 
                "name": "Ross", 
                "age": "25"
          } 

但是您想要的是

    [{"name": "Fred", "age": "5"}, 
{"name": "Fred", "age": "5"},
 {"name": "Fred", "age": "5"}]

所以这应该工作。

  {"model": {
    "name_and_age": [
    {"name": "Fred", "age": "5"}, 
    {"name": "Fred", "age": "5"},
     {"name": "Fred", "age": "5"}
    ]
    }

}

要执行此操作,您必须更改从许可证中删除:name, :age并添加name_and_age之类的方法。

def model_params
      params.require(:model).permit(:name_and_age)
    end

答案 1 :(得分:0)

我认为我更喜欢的可能性是允许许可证!接受一个可选参数,以允许这样做。

params.require(:model).permit(:name).permit!(:data)

您可以参考此This