2014-12-06 31 views
0

我开发了一个简单的玩具应用程序,它使用脚手架来模拟用户和微型帖子。这是我的user_controllerRails http休息架构

源 “railstutorial.org”

class UsersController < ApplicationController 
    before_action :set_user, only: [:show, :edit, :update, :destroy] 

    # 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 

    private 
    # Use callbacks to share common setup or constraints between actions. 
    def set_user 
    @user = User.find(params[:id]) 
    end 

    # Never trust parameters from the scary internet, only allow the white list through. 
    def user_params 
    params.require(:user).permit(:name, :email) 
    end 
end 

显示方法用于呈现类型为“users/1”类型的URL的用户页面。

但更新方法是更新我们用户的数据库,但在更新操作被调用后,它会将我们重定向到“users/1”URL。

在第一种情况下,http请求的类型是“GET”,它将路由给“显示”功能/操作,但是第二种情况是http请求的类型为“PATCH”,它将控制路由到“更新”功能,函数只需更新数据库,那么为什么以及如何将我们重定向到“users/1”。它是否在任何地方调用任何渲染代码?

我是初学者,所以如果问题有点傻,请原谅我,但如果有人能回答,这将是一个很大的帮助。

回答

1

看到你的代码更新动作,如果@ user.update(user_params)后

要调用redirect_to时,它只是您重定向到您所提供它的新途径。
在这种情况下,当您传递对象时,其重定向显示动作,您也可以提供任何其他路由。

了解redirect_to的http://api.rubyonrails.org/classes/ActionController/Redirecting.html

+0

哦,谢谢。我不知道我是如何错过它的。谢谢。 – 2014-12-07 02:19:04

0

@user是一个简单的用户条目对象谁在用户模型得到了一个ID,如果你说redirect_to的@user,它会自动检测用户的@user和重定向发现ID到/用户/:ID,铁轨足够了解,