#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.