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

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

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

localhost:3000/users?name='noah'&email='noah@gmail.com'

Мои роутеры:

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='noah@gmail.com'

Ошибка:

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?
Формы c голосовым вводом в React с помощью Speechly
Формы c голосовым вводом в React с помощью Speechly
Пытались ли вы когда-нибудь заполнить веб-форму в области электронной коммерции, которая требует много кликов и выбора? Вас попросят заполнить дату,...
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Будучи разработчиком веб-приложений, легко впасть в заблуждение, считая, что приложение без JavaScript не имеет права на жизнь. Нам становится удобно...
Flatpickr: простой модуль календаря для вашего приложения на React
Flatpickr: простой модуль календаря для вашего приложения на React
Если вы ищете пакет для быстрой интеграции календаря с выбором даты в ваше приложения, то библиотека Flatpickr отлично справится с этой задачей....
В чем разница между Promise и Observable?
В чем разница между Promise и Observable?
Разберитесь в этом вопросе, и вы значительно повысите уровень своей компетенции.
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Клиент для URL-адресов, cURL, позволяет взаимодействовать с множеством различных серверов по множеству различных протоколов с синтаксисом URL.
Четыре эффективных способа центрирования блочных элементов в CSS
Четыре эффективных способа центрирования блочных элементов в CSS
У каждого из нас бывали случаи, когда нам нужно отцентрировать блочный элемент, но мы не знаем, как это сделать. Даже если мы реализуем какой-то...
0
0
22
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

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

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

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

{ user: { name: "Bob", email: "bob@example.com" } }

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

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

{ name: "Bob", email: "bob@example.com" }

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

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

localhost:3000/users?user[name]='noah'&user[email]='noah@example.com'

Это то, о чем я думал, тбх. Однако я получил эту ошибку: 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

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