在更新方法在Rails中使用的编辑方法

问题描述:

如果我有以下编辑方法:在更新方法在Rails中使用的编辑方法

def edit 
    @pet = Pet.find(params[:id]) 
end 

及以下更新方法:

def update 
    @pet = Pet.find(params[:id]) 
    if @pet.update_attributes(pet_params) 
    redirect_to(:action => 'show', :id => @pet.id) 
    else 
    render('index') 
    end 
end 

我能简单地使用编辑方法在更新方法如:

def update 
    edit 
    if @pet.update_attributes(pet_params) 
    redirect_to(:action => 'show', :id => @pet.id) 
    else 
    render('index') 
    end 
end 

控制器操作不应该调用其他操作。如果两者之间(如@pet = Pet.find(params[:id])这可以通过before_action进行重叠:

class PetsController < ApplicationController 
    before_action :set_pet, only: %i[edit update] 

    def edit 
    end 

    def update 
    if @pet.update_attributes(pet_params) 
     redirect_to(:action => 'show', :id => @pet.id) 
    else 
     render('index') 
    end 
    end 

    private 

    def set_pet 
    @pet = Pet.find(params[:id]) 
    end 
end 

http://guides.rubyonrails.org/action_controller_overview.html#filters