2016-03-03 4 views
0

Я использую этот 3-й контроллер партии:Rails - Intercept respond_with

class LibController 

     def update 
     # 29 lines of code 
     respond_with resource 
     end 

    end 

Я хочу сделать что-то другое, чем respond_with в конце. Но я не хочу просто копировать/вставлять все 29 строк в MyController.update. К сожалению, я не могу понять, способ визуализации или перенаправлять в другом месте:

class MyController < LibController 

    def update 
     super 
     redirect_to somewhere_else 
    end 

    end 

Я получаю DoubleRenderError: Render and/or redirect were called multiple times in this action. Я предполагаю, что это потому, что respond_with звонит render сразу. Есть ли способ заблокировать/предотвратить это?

Спасибо!

ответ

0

Я думаю, что вы делаете дважды перенаправление. Попробуйте удалить одно перенаправление на update метод.

Проверьте пример кода ниже, который показывает эквивалентный ответ при использовании reply_with.

def create 
    @user = User.new(params[:user]) 
    flash[:notice] = 'User was successfully created.' if @user.save 
    respond_with(@user) 
end 

Который точно так же, как:

def create 
    @user = User.new(params[:user]) 

    respond_to do |format| 
    if @user.save 
     flash[:notice] = 'User was successfully created.' 
     format.html { redirect_to(@user) } 
     format.xml { render xml: @user, status: :created, location: @user } 
    else 
     format.html { render action: "new" } 
     format.xml { render xml: @user.errors, status: :unprocessable_entity } 
    end 
    end 
end 
+0

Благодаря aldrien. Мне интересно, мой единственный вариант - скопировать/вставить весь метод из стороннего метода, чтобы заменить эту последнюю строку. – Matt

+0

Мне кажется, вам просто нужно использовать перенаправление в методе Controller и попытаться удалить response_with в «классе LibController». Извините, я просто догадываюсь, так как я не видел ваших полных кодов. Попытайтесь его маневрировать, важно использовать только одно перенаправление. –