在更新方法在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