2017-11-23 4 views
0

私はRails Tutorialの2章目です。マイケル・ハートルです。Rails:POSTリクエストがメインURL(/ users)に送信されるのはなぜですか?

私はこれを行うとき:

# 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に行くとき、私はどこをチェックするとき、私は新しいユーザーを追加するためのページを取得しますが:

rails generate scaffold User name:string email:string 

をこれは私のusers_controller.rbのように見えるものです新しいユーザーへのリクエストが送信されています。投稿されたメッセージは/usersで十分です。 enter image description here

/users/newではなく、新しいユーザーが/usersに送信されるのはなぜですか?これはある種の大会ですか?私は別の足場を作り、それは同じように動作します。私は以前Flaskで作業していましたが、POSTリクエストコードをGETリクエストを受け入れた同じメソッド/関数に追加しました。これはなぜここに当てはまりませんか? Railsは新しいユーザーのPOSTリクエストを/users/newに送信できませんでしたか?なぜ/users URIですか?これは私を混乱させる。すべてのリンクはすばらしいでしょう。ありがとうございました!

クイック編集:私が追加したくないもの。私はこれらのURIをURIと考えるべきではなく、私が提出する何らかの抽象的なエンティティと考えるべきであるからです。たとえば、新しいユーザーを追加するときに、ユーザー(/users)を追加すると、/users/newに追加するよりも理にかなっていますか?このロジックを使用すると、/users/idに送信するPUTメソッドは、URIとは対照的に、既存のユーザーエンティティに送信しているので意味があります。

+0

'/ users/new'はGETリクエスト用のセットで、新しいユーザーフォームを見ることができます。フォームを送信すると、 '' POST'/users'というアクションを作成するように要求します。何も問題ありません。 –

答えて

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/newnewアクションでUsersControllerと呼ばれ、POST要求及び作用を有するフォームは/usersであること含まnew.html.erbをフェッチします。

フォーム提出後、createアクションを持つ 'UsersController'が呼び出され、新しいユーザーが作成されます。フォームのユーザーを作成

POST /users =>そのPOSTリクエストでページを表示

ので、

GET /users/new =>そのget要求。レールのルーティングチェックリンクhttp://guides.rubyonrails.org/routing.html

+0

ありがとう@ puneet18!私はこの質問をする前にそのリンクをチェックしました。私の質問は、なぜ '/ users'へのPOSTで'/users/new'へのPOSTではないのでしょうか? – retrazil

+0

@retrazilチェックレーキルート – puneet18

+0

@retrazil私の投稿を更新しました。ユーザーのリソースにはすべてのルートがあります。そのレールコンベンション、レールはこれらすべてのルートを提供します。 – puneet18