Rails — перехват ответа_с

Я использую этот сторонний контроллер:

   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. Есть ли способ заблокировать/предотвратить это?

Спасибо!


person Matt    schedule 03.03.2016    source источник


Ответы (1)


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

Посмотрите пример кода ниже, который показывает эквивалентный ответ при использовании respond_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
person aldrien.h    schedule 03.03.2016
comment
Спасибо, Алдриен. Мне интересно, единственный ли мой вариант - скопировать/вставить весь метод из стороннего метода, просто чтобы заменить эту последнюю строку. - person Matt; 03.03.2016
comment
я думаю, вам просто нужно использовать перенаправление в методе контроллера и попытаться удалить response_with в классе LibController. Извините, я просто предполагаю возможный способ, так как не видел ваших полных кодов. Попробуйте маневрировать, главное ИСПОЛЬЗУЙТЕ только одно перенаправление. - person aldrien.h; 04.03.2016