我在Michael Hartl的Rails Tutorial的第二章。
当我这样做时:
rails generate scaffold User name:string email:string
这就是我users_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。
答案 0 :(得分:2)
是的,这是一个惯例。
您可能想了解Representational State Transfer (REST) - 尤其是有关relationship between URL and HTTP methods的部分。
答案 1 :(得分:0)
从终端运行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
通过UsersController
操作调用new
并获取new.html.erb
,其中包含POST
请求和操作/users
的表单。
表单提交后,' UsersController'调用create
动作,创建新用户。
所以,
GET /users/new
=>它是一个get请求,显示一个带有表单的页面
POST /users
=>它是一个创建用户的帖子请求。
有关rails路由的详细信息,请查看链接http://guides.rubyonrails.org/routing.html