简体   繁体   中英

Rails/React App Signup throwing 500 internal server error

I'm trying to get user data to save to my Rails DB for user info through a sign up form on a React front end. I've got my route and controller written properly (at least I think) and the fetch request below but I keep getting a 500 internal error through on submit. Please let me know what I'm missing, any help would be greatly appreciated!

My route:

resources:users, only: [:show, :create]

My create action in UsersController:

  def create
    user = User.create!(user_params)
      if user.valid?
        session[:user_id] = user.id # remembering who our user is 
        render json: user, status: :ok
      else
        render json: {error: user.errors.messages}
      end
  end

and lastly my fetch request from the Signup.js component on the React frontend, where I'm getting the error on the line that has 'fetch'

fetch(`/users`,{
      method:'POST',
      headers:{'Content-Type': 'application/json'},
      body:JSON.stringify(user)
    })
    .then(res => {
        if(res.ok){
            res.json().then(user => {
                history.push(`/users/${user.id}`)
            })

This might only be part of your problem, but first creating, then asking for validity is backwards.

Do something like this instead:

def create
  user = User.new(user_params)
    if user.save # <-- will return false if the save fails
      user.reload
      session[:user_id] = user.id # remembering who our user is 
      render json: user, status: :ok
    else
      render json: {error: user.errors.messages}
    end
end

If you really want to check validity explicitly:

def create
  user = User.new(user_params)
    if user.valid? # <-- will check validity
      user.save
      user.reload
      session[:user_id] = user.id # remembering who our user is 
      render json: user, status: :ok
    else
      render json: {error: user.errors.messages}
    end
end

My guess is your error might be coming from the fact that your user variable doesn't actually have an ID yet. You need to save the record, then refresh it to get an ID.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM