首页 文章

Rails JSON参数未解析

提问于
浏览
1

我在ReactJS中有一个注册表单,并希望以JSON格式将用户数据(名称,电子邮件,密码)发送到我的rails API . 然后Rails不会将我的JSON数据解析为参数 .

路线

Rails.application.routes.draw do
    get '/list_users' => 'users#index'
    post '/register_user' => 'users#register'
end

用户控制器

class UsersController < ApplicationController
    def index
        @users = User.all
        render json: @users
    end

    def register
        puts params.inspect
        @user = User.new(name: 'TEST', :email => params[:email], :password => params[:password])
        #@user = User.new(name: 'User', email: 'controller@user.com', password: 'password') (this works)
        @user.save
    end
end

把params.inspect输出:

<ActionController::Parameters {"controller"=>"users", "action"=>"register"} permitted: false>

报名表格

postData(){
    var myHeaders = new Headers();
    myHeaders.append('Accept', 'application/json')
    myHeaders.append('Content-Type', 'application/json');

    var data = JSON.stringify({
        name: "Test",
        email: "test@post.com",
        password: "password"
    })

    fetch("http://127.0.0.1:3000/register_user",{
        method: 'POST',
        headers: myHeaders,
        mode: 'no-cors',
        body: data
    })
    .then(function(res){ return res.json(); })
    .then(function(data){ alert( JSON.stringify( data ) ) })
    .catch( (ex) => {
        console.log("Fetch failed" + ex);
    });
}

在配置中启用了JSON的参数包装 . 谢谢您的帮助!

2 回答

  • 0

    在这种情况下,JSON参数不具有符号键,而是字符串键 . 试试这个:

    @user = User.new(name: 'TEST', :email => params['email'], :password => params['password'])
    
  • 1

    配置Rack :: Cors以接受OPTIONS就可以了,就像他的评论中的sideshowbarker explainend一样 .

    application.rb中

    config.middleware.insert_before 0, Rack::Cors do
      allow do
        origins '*'
        resource '*', :headers => :any, :methods => [:get, :post, :options]
      end
    end
    

    在前端

    mode: 'cors'
    

相关问题