Ruby on rails Rails:为什么POST请求被提交到这里的主URL(/users)?
我正在读迈克尔·哈特尔的小说的第二章 当我这样做时:Ruby on rails Rails:为什么POST请求被提交到这里的主URL(/users)?,ruby-on-rails,ruby,rest,Ruby On Rails,Ruby,Rest,我正在读迈克尔·哈特尔的小说的第二章 当我这样做时: rails generate scaffold User name:string email:string 这就是我的users\u controller.rb看起来的样子: # GET /users # GET /users.json def index @users = User.all end # GET /users/1 # GET /users/1.json def show end
rails generate scaffold User name:string email:string
这就是我的users\u controller.rb
看起来的样子:
# GET /users
# GET /users.json
def index
@users = User.all
end
# GET /users/1
# GET /users/1.json
def show
end
# GET /users/new
def new
@user = User.new
end
# GET /users/1/edit
def edit
end
# POST /users
# POST /users.json
def create
@user = User.new(user_params)
respond_to do |format|
if @user.save
format.html { redirect_to @user, notice: 'User was successfully created.' }
format.json { render :show, status: :created, location: @user }
else
format.html { render :new }
format.json { render json: @user.errors, status: :unprocessable_entity }
end
end
end
# PATCH/PUT /users/1
# PATCH/PUT /users/1.json
def update
respond_to do |format|
if @user.update(user_params)
format.html { redirect_to @user, notice: 'User was successfully updated.' }
format.json { render :show, status: :ok, location: @user }
else
format.html { render :edit }
format.json { render json: @user.errors, status: :unprocessable_entity }
end
end
end
# DELETE /users/1
# DELETE /users/1.json
def destroy
@user.destroy
respond_to do |format|
format.html { redirect_to users_url, notice: 'User was successfully destroyed.' }
format.json { head :no_content }
end
end
当我转到http://localhost:3000/users/new
,我会得到一个用于添加新用户的页面,但当我检查新用户的请求提交到哪里时,肯定会将其发布到/users
。
为什么新用户提交给/users
而不是/users/new
?这是某种惯例吗?我创建了另一个脚手架,它的行为与此相同。我以前使用过Flask,我将POST请求代码添加到接受GET请求的相同方法/函数中。为什么这里不是这样?Rails不能将我的新用户POST请求发送到/users/new
?为什么特别是/users
URI?这让我很困惑。任何链接都会很棒。谢谢大家!
快速编辑:我错过了要添加的内容。这是因为我不应该认为这些URI是URI,而是我提交给的某种抽象实体。例如,当我添加一个新用户时,将实体添加到用户(
/users
)比添加到/users/new
更有意义?如果我使用这种逻辑,那么提交给/users/id
的PUT方法更有意义,因为我提交给的是现有的用户实体,而不是URI 从终端运行rake routes
,您将看到应用程序的所有路由
以下是用户的路线:
HTTP Verb Path Controller#Action
GET /users users#index
GET /users/new users#new
POST /users users#create
GET /users/:id users#show
GET /users/:id/edit users#edit
PATCH/PUT /users/:id users#update
DELETE /users/:id users#destroy
/users/new
使用new
操作调用userscocontroller
,并获取new.html.erb
,其中包含一个带有POST
请求和操作be/users
的表单
表单提交后,调用带有create
操作的“UsersController”,创建新用户
所以
GET/users/new
=>这是一个GET请求,它显示一个带有表单的页面
POST/users
=>它是创建用户的POST请求
有关rails路由的更多详细信息,请从终端运行链接
rake routes
,您将看到应用程序的所有路由
以下是用户的路线:
HTTP Verb Path Controller#Action
GET /users users#index
GET /users/new users#new
POST /users users#create
GET /users/:id users#show
GET /users/:id/edit users#edit
PATCH/PUT /users/:id users#update
DELETE /users/:id users#destroy
/users/new
使用new
操作调用userscocontroller
,并获取new.html.erb
,其中包含一个带有POST
请求和操作be/users
的表单
表单提交后,调用带有create
操作的“UsersController”,创建新用户
所以
GET/users/new
=>这是一个GET请求,它显示一个带有表单的页面
POST/users
=>它是创建用户的POST请求
有关rails路由检查链接的更多详细信息,请参见是的,这是一种惯例
你可能想读一读,尤其是关于的部分。是的,这是一个惯例
您可能想阅读有关的内容,尤其是有关的部分。谢谢@puneet18!在问这个问题之前,我已经检查了这个链接。我的问题是,为什么发到
/users
而不是/users/new
?@retrazil-check-rakeroutes@retrazil我更新了我的帖子。有所有用户资源的路由。按照rails的惯例,rails提供了所有这些路由。@retrazil/users/new
是GET-type请求,并用新操作调用了users-controller,而/users
POST-request称为create-actionThank@puneet18!在问这个问题之前,我已经检查了这个链接。我的问题是,为什么发到/users
而不是/users/new
?@retrazil-check-rakeroutes@retrazil我更新了我的帖子。有所有用户资源的路由。按照rails的惯例,rails提供了所有这些路由。@retrazil/users/new
是GET类型的请求,并使用新操作调用用户控制器,而/users
POST请求称为create action/users/new
是GET请求的集合,通过它您可以看到新的用户表单。现在,当您提交表单时,它将请求创建操作,即POST/users
。这个/users/new
是一个GET请求集,您可以通过它查看新的用户表单。现在,当您提交表单时,它将请求创建操作,即POST/users
。这没什么问题谢谢!这回答了我的问题,谢谢!这回答了我的问题。