在Rails中使用update方法中的edit方法

时间:2015-01-21 01:25:03

标签: ruby-on-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

我可以简单地在更新方法中使用edit方法,如:

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

1 个答案:

答案 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