2014-12-04 3 views
0

Я не могу понять эту ошибку Double Render при создании метода.Двойная ошибка рендера при создании

Проблема заключается в том, что метод Create должен перенаправлять объект, который не является конкретным, из-за того, что объект Create Method имеет полиморфный класс (Commentary - Commentable).

Я хочу создать комментарий, связать его с объектом (Назначение, Лицо, ...) и перенаправить на объект (redirect_to @objeto), а не на индекс комментариев. Что мне делать?

Код (comentarios_controller.rb) в основном не является:

def create 

    #Verifica o objeto 
    @objeto = nil 
    tipo = params[:comentable_type] 
    case tipo 
     when "Comercial::Oportunidade" 
      @objeto = Comercial::Oportunidade.find_by_id(params[:comentable_id]) 
     when "Comercial::Compromisso" 
      @objeto = Comercial::Compromisso.find_by_id(params[:comentable_id]) 
    end 

    @comentario=Comercial::Comentario.new(params[:comercial_comentario]) 
    @comentario.organizacoes<<current_empresa 
    @comentario.usuario = current_usuario 

    create! do |success, failure| 
    if success 
    @objeto.comentarios << @comentario 
    flash[:success] = I18n.t 'activerecord.successful.messages.created.m', :model => @comentario.class.model_name.human 
    redirect_to @objeto 
    else 
    flash.discard 
    end 
end 
end 

Использования Rails 3.2.2

+0

Где код для создания! ? –

+0

Он исходит из InheritedResources (https://github.com/josevalim/inherited_resources). – Laerte

ответ

1

Я не очень знаком с унаследованными ресурсами (и я вижу, что автор больше не рекомендует его), но похоже, что вы не используете его здесь правильно. Приведенный пример, который наиболее похож на ваше использование выглядит следующим образом:

class ProjectsController < InheritedResources::Base 
    def update 
    update! do |success, failure| 
     failure.html { redirect_to project_url(@project) } 
    end 
    end 
end 

Обратите внимание на способе, которым он использует параметр failure - это не логический, и, предположительно, он рассчитывает занять блок, как показано здесь : { redirect_to ... }. Поэтому я думаю, вы должны попробовать переписать эту часть, чтобы больше походить:

create! do |success, failure| 
    success.html { 
    @objeto.comentarios << @comentario 
    flash[:success] = I18n.t 'activerecord.successful.messages.created.m', :model => @comentario.class.model_name.human 
    redirect_to @objeto 
    } 
    failure.html { flash.discard } 
end 
+0

Это сработало отлично! – Laerte

+1

Прохладный! Рад, что это сработало. –

Смежные вопросы