«ActionController::ParameterMissing», связанный с User.rb и контроллерами в Rails

Я новичок в Rails, и я застрял. Я расстроен и не люблю ничего не получать.

Мой запрос в почтальоне:

localhost:3000/users?name='noah'&email='[email protected]'

Мои роутеры:

Rails.application.routes.draw do
  # Define your application routes per the DSL in https://guides.rubyonrails.org/routing.html
  resources :users
  # Defines the root path route ("/")
  get 'users', to: 'users#index'#, as: 'users'
  post 'users', to: 'users#create'#, as: 'post_user'
  get 'users/new', to: 'users#new'#, as: 'new_user'
  get 'users/:id/edit', to: 'users#edit'#, as: 'edit_user'
  get 'users/:id', to: 'users#show'#, as: 'user'
  patch 'users/:id', to: 'users#update'#, as: 'patch_user'
  put 'users/:id',  to: 'users#update'#, as: 'update_user'
  delete 'users/:id', to: 'users#destroy'#, as: 'delete_user'
  # root "articles#index"
end

Модель User.rb:

class UsersController < ApplicationController
    def index
        render json: params
    end

    def new 
        render plain: 'This is new.'
    end

    def create
        user = User.new(params.require(:user).permit(:name, :email))

        # replace the `user_attributes_here` with the actual attribute keys
        user.save!
        render json: user
    end

    def show 
        #render :file => "/home/postgres/Documents/61729-0.pdf"
        render json: params
    end

    def update 
        render json: 'This is update in json!'
    end

    def destroy 
        render :file => "/home/postgres/Documents/61729-0.pdf"
    end
end

И схема/БД:

ActiveRecord::Schema[7.0].define(version: 2022_04_09_180203) do
  # These are extensions that must be enabled in order to support this database
  enable_extension "plpgsql"

  create_table "users", force: :cascade do |t|
    t.string "name"
    t.string "email"
    t.datetime "created_at", null: false
    t.datetime "updated_at", null: false
  end

end

Я получаю эту ошибку, когда когда-либо пытаюсь создать объект пользователя через почтальона, вызвав команду post:

localhost:3000/users?name='noah'&email='[email protected]'

Ошибка:

ActionController::ParameterMissing at /users
============================================

param is missing or the value is empty: user

> To access an interactive console with this error, point your browser to: /__better_errors


app/controllers/users_controller.rb, line 11
--------------------------------------------

``` ruby
    6       def new 
    7           render plain: 'This is new.'
    8       end
    9   
   10       def create
>  11           user = User.new(params.require(:user).permit(:name, :email))
   12   
   13           # replace the `user_attributes_here` with the actual attribute keys
   14           user.save!
   15           render json: user
   16       end

Отслеживание приложения

  • app/controllers/users_controller.rb:11:в `создать'

Why is this happening?
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
0
22
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Этот код в вашем #create:

user = User.new(params.require(:user).permit(:name, :email))

Предполагается, что параметры приходят в виде хеша с ключом user, например:

{ user: { name: "Bob", email: "[email protected]" } }

Обычно это то, что мы ожидаем, когда делаем действие create в Rails.

Ваш запрос POST не отправляет параметры, завернутые в объект user. Он просто отправляет:

{ name: "Bob", email: "[email protected]" }

require(:user) сразу выдает ошибку, потому что ключа user нет в параметрах.

Чтобы исправить это, вы можете отформатировать URL-адрес таким образом или отправить данные в виде полезной нагрузки JSON:

localhost:3000/users?user[name]='noah'&user[email]='[email protected]'

Это то, о чем я думал, тбх. Однако я получил эту ошибку: ActiveRecord::StatementInvalid at /users ==================================== === PG::UndefinedTable: ОШИБКА: отношение "application_records" не существует СТРОКА 9: ГДЕ a.attrelid = '"application_records"'::regclass ^ > Чтобы получить доступ к интерактивной консоли с этой ошибкой, укажите в браузере: / __better_errors

naarter 09.04.2022 21:33

Как отправить его в виде полезной нагрузки JSON в почтальоне?

naarter 09.04.2022 21:36

@naarter для другой ошибки о «application_records», я не уверен, почему вы это получите. Единственная причина, о которой я могу думать, это то, что вам не хватает этой строки в вашем ApplicationRecord классе: self.abstract_class = true

TonyArra 09.04.2022 21:45

Другие вопросы по теме