'ActionController::ParameterMissing' 与 User.rb 和 Rails 中的控制器相关
'ActionController::ParameterMissing' related to User.rb and controllers in Rails
我是 Rails 的新手,我被卡住了。我很沮丧,不喜欢得不到东西。
我在 postman 中的请求是:
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
而 schema/db 是:
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
每当我尝试通过 postman 调用 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?
您 #create
中的此代码:
user = User.new(params.require(:user).permit(:name, :email))
它假定参数以带有 user
键的散列形式出现,如下所示:
{ user: { name: "Bob", email: "bob@example.com" } }
这通常是我们在 Rails 中执行 create
操作时所期望的。
您的 POST 请求未发送包装在 user
对象中的参数。正在发送:
{ name: "Bob", email: "bob@example.com" }
require(:user)
立即抛出错误,因为 user
键不在参数中。
要解决此问题,您可以像这样格式化 URL,或将数据作为 JSON 有效负载发送:
localhost:3000/users?user[name]='noah'&user[email]='noah@example.com'
我是 Rails 的新手,我被卡住了。我很沮丧,不喜欢得不到东西。
我在 postman 中的请求是:
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
而 schema/db 是:
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
每当我尝试通过 postman 调用 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?
您 #create
中的此代码:
user = User.new(params.require(:user).permit(:name, :email))
它假定参数以带有 user
键的散列形式出现,如下所示:
{ user: { name: "Bob", email: "bob@example.com" } }
这通常是我们在 Rails 中执行 create
操作时所期望的。
您的 POST 请求未发送包装在 user
对象中的参数。正在发送:
{ name: "Bob", email: "bob@example.com" }
require(:user)
立即抛出错误,因为 user
键不在参数中。
要解决此问题,您可以像这样格式化 URL,或将数据作为 JSON 有效负载发送:
localhost:3000/users?user[name]='noah'&user[email]='noah@example.com'