Ruby on Rails API => POST请求无效

时间:2018-01-03 21:29:21

标签: ruby-on-rails ruby api post request

我目前正在使用Postman向以下路线发出POST请求:' localhost:3000 / members / login'。帖子请求的内容如下:

{ 
  "email": "user@email.com",
  "password": "password"
}

路线定义如下:

def login
  puts params.inspect
  puts member_params.to_s
  member = Member.find_by(email: params[:email].to_s.downcase)
end
...
def member_params
  params.require(:member).permit(:email, :password, :password_confirmation)
end

我在控制台收到的输出如下:

Started POST "/members/login" for 127.0.0.1 at 2018-01-02 18:56:28 -0800
(2.5ms)  SELECT "schema_migrations"."version" FROM "schema_migrations" ORDER BY "schema_migrations"."version" ASC
Processing by MembersController#login as */*
<ActionController::Parameters {"controller"=>"members", "action"=>"login"} permitted: false>
Completed 400 Bad Request in 1ms (ActiveRecord: 0.0ms)



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

app/controllers/members_controller.rb:94:in `member_params'
app/controllers/members_controller.rb:65:in `login'

你可能已经猜到了,我对此很陌生。我特别想要的是以下内容:

1)是否有快速解决方法,为什么参数(电子邮件和密码)没有从Postman POST请求传递到API,以帮助我实现这一点

2)为了使答案对未来可能谷歌这个问题的人更有帮助,当API调用(特别是POST请求)没有按预期传递参数时,是否有一个快速的建议步骤清单?

2 个答案:

答案 0 :(得分:0)

您的member_params函数要求传递member,这不包含在您从Postman发送的参数中。

您没有看到任何正在打印的内容,因为member_params函数是before_action,这意味着它会在您的登录函数被调用之前发生。

更改Postman中的内容以包含它。

{ 
    "member":
        {
            "email": "email address",
            "password": "password"
        }
}

答案 1 :(得分:-2)

我认为你的json应该是这样的 {member:{emai:___, password:_____}}