如果我有以下编辑方法:
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
我可以简单地在更新方法中使用edit方法,如:
def update
edit
if @pet.update_attributes(pet_params)
redirect_to(:action => 'show', :id => @pet.id)
else
render('index')
end
end
答案 0 :(得分:0)
控制器操作不应调用其他操作。如果两者之间存在重叠(例如@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