Ruby On Rails Зарегистрируйтесь, Войдите В Форму

#ruby-on-rails

Вопрос:

Я получил сообщение об ошибке, что параметр отсутствует или значение пустое: Регистрация

Вот мой файл sign_up_controller.rb:

 class SignUpController < ApplicationController

  def index

  end
  
  def create
    signUp = signUp.new(signUp_params)
    if signUp.save
      session[:SignUp_id]= signUp.id
      redirect_to '/'
    else
      flash[:register_errors] = user.errors.full_messages
      redirect_to '/'
    end
  end

  private
    def signUp_params
        params.require(:signUp).permit(:email, :username, :password)
    end
end
 

И это форма регистрации:

 <!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <link rel="stylesheet" href="sign_up.css">
</head>
<body>

<form action="/sign_up" method = "POST" style="padding: 100px">
<div class="container">
  <h1>Sign Up</h1>

  <input type="hidden" name="authenticity_token" value="<%=form_authenticity_token%>">
  <label for="email"><b><p style="text-align:center">Email</p></b></label>
  <input type="email" placeholder="Enter Email" name="email" required>

  <label for="username"><b><p style="text-align:center">Username</p></b></label>
  <input type="name" placeholder="Enter Username" name="username" required>

  <label for="password"><b><p style="text-align:center">Password</p></b></label>
  <input type="password" placeholder="Enter Password" name="password" required>
  
  <div class="clearfix">
    <button type="submit" id="signupbutton" class="signupbtn">Submit</button>
  </div>
  <p style = "text-align: center; color: white" href="login"><%= link_to 'Already have an account? Log in', login_url %></p>
</div>
</form>

  <!--
    JS example. You don't need JS for this task's week for now.
  -->
  <%# <%= javascript_pack_tag 'home_example' %>
</body>
</html>
 

Я совершенно новичок в Ruby On Rails. Я работаю над страницей регистрации/входа в систему. Кто-нибудь может помочь мне выяснить, что не так с моим кодом, пожалуйста?

Комментарии:

1. Просто подсказка sign_up_params или signup_params это рубиновый способ именования методов, используя snake_case

Ответ №1:

В соответствии с тем, как в настоящее время построена ваша форма, параметры не будут вложены в :signUp нее . Вместо этого поля будут находиться на верхнем уровне хэша параметров. Вы можете сделать puts params это в начале своего create действия, чтобы убедиться в этом.

Обновление вашего signUp_params метода должно решить эту проблему:

 def signUp_params
  params.permit(:email, :username, :password)
end
 

Если вам действительно нужны вложенные параметры, проверьте https://guides.rubyonrails.org/form_helpers.html#understanding-parameter-naming-conventions.