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
。这没什么问题谢谢!这回答了我的问题,谢谢!这回答了我的问题。