Параметр Ruby on Rails отправлен в контроллер, но не сохранен в БД - PullRequest
0 голосов
/ 27 декабря 2018

Я отправил параметр из Почтальона.Параметры успешно отправлены на сервер.но контроллер не сохраняет его в базе данных.

Я пытался сделать инициализатор в User.rb, но он не работает с инициализатором «Сообщение об ошибке: параметр пропущен. дан 1, ожидается 3».

Таким образом, я удалил инициализатор, и Сервер может получить параметры хорошо, но не может сохранить в базе данных.

enter image description here

User.rb

class User < ApplicationRecord  
  attr_accessor :email, :pwd, :usertype  

=begin  
 def initialize(email, pwd, usertype) @email=email, @pwd=pwd, @usertype=usertype end=end  

  VALID_EMAIL_REGEX = /\A[\w+\-.]+@[a-z\d\-.]+\.[a-z]+\z/i  
  validates :email, presence: true, uniqueness: { case_sensitive: false},  
  format: {with: VALID_EMAIL_REGEX}, length: {minimum:3, maximum:50}  

  validates :pwd, presence: true, length: {minimum:3, maximum:25}  

  has_many :bookings  


end

users_controller.rb

class UsersController < ApplicationController  
  before_action :set_user, only: [:show, :update, :destroy]  

  # GET /users  
 # GET /users.json  def index  
  @users = User.all  
  end  

  # GET /users/1  
 # GET /users/1.json  def show  
  end  

  # POST /users  
 # POST /users.json  def create  
  @user = User.new(user_params)  

    if @user.save  
      render :show, status: :created, location: @user  
  else  
  render json: @user.errors, status: :unprocessable_entity  
  end  
 end  
  # PATCH/PUT /users/1  
 # PATCH/PUT /users/1.json  def update  
  if @user.update(user_params)  
      render :show, status: :ok, location: @user  
  else  
  render json: @user.errors, status: :unprocessable_entity  
  end  
 end  
  # DELETE /users/1  
 # DELETE /users/1.json  def destroy  
  @user.destroy  
  end  

  private  
  # Use callbacks to share common setup or constraints between actions.  
  def set_user  
  @user = User.find(params[:id])  
    end  

  # Never trust parameters from the scary internet, only allow the white list through.  
  def user_params  
  params.require(:user).permit(:email, :pwd, :usertype)  
      # params.permit!  
  end  
end

rout.rb

Rails.application.routes.draw do  
  resources :bookings  
  resources :users  
  # For details on the DSL available within this file, see http://guides.rubyonrails.org/routing.html  
  #  

end

Серверное сообщение

Started POST "/users" for 127.0.0.1 at 2018-12-27 21:53:13 +0900
   (2.6ms)  SET NAMES utf8,  @@SESSION.sql_mode = CONCAT(CONCAT(@@sql_mode, ',STRICT_ALL_TABLES'), ',NO_AUTO_VALUE_ON_ZERO'),  @@SESSION.sql_auto_is_null = 0, @@SESSION.wait_timeout = 2147483
  �넶 C:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/activerecord-5.2.2/lib/active_record/log_subscriber.rb:98
   (1.0ms)  SELECT `schema_migrations`.`version` FROM `schema_migrations` ORDER BY `schema_migrations`.`version` ASC
  �넶 C:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/activerecord-5.2.2/lib/active_record/log_subscriber.rb:98
Processing by UsersController#create as */*
  Parameters: {"email"=>"admin2@namver.com", "pwd"=>"Reza Adha", "usertype"=>"Hamonangan", "user"=>{"email"=>"admin2@namver.com", "pwd"=>"Reza Adha", "usertype"=>"Hamonangan"}}
   (0.5ms)  BEGIN
  �넶 app/controllers/users_controller.rb:20
  User Exists (0.6ms)  SELECT  1 AS one FROM `users` WHERE `users`.`email` = 'admin2@namver.com' LIMIT 1
  �넶 app/controllers/users_controller.rb:20
  User Create (2.0ms)  INSERT INTO `users` (`created_at`, `updated_at`) VALUES ('2018-12-27 12:53:13', '2018-12-27 12:53:13')
  �넶 app/controllers/users_controller.rb:20
   (60.1ms)  COMMIT
  �넶 app/controllers/users_controller.rb:20
  Rendering users/show.json.jbuilder
  Rendered users/_user.json.jbuilder (0.8ms)
  Rendered users/show.json.jbuilder (280.3ms)
Completed 201 Created in 1431ms (Views: 1299.2ms | ActiveRecord: 102.5ms)

Как видите, сервер хорошо принял параметр.но контроллер вставляет только столбец даты create_at, updated_at.

enter image description here

1 Ответ

0 голосов
/ 27 декабря 2018

Просто удалите эту строку

attr_accessor :email, :pwd, :usertype

из вашего User класса.

Методы установки и получения, сгенерированные attr_accessor, переопределяют методы получения и установки, которые создаются Rails автоматически.

И - из соображений безопасности - не храните пароли в открытом виде в вашембаза данных.Предлагаю прочитать о has_secure_password.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...