创建时出现双重渲染错误

时间:2014-12-04 14:17:32

标签: ruby-on-rails ruby-on-rails-3.2

我无法理解创建方法的双重渲染错误。

问题是Create Method必须重定向到一个非特定的对象,因为Create Method的对象有一个多态类(评论 - 可评论)。

我希望创建一个评论,将其链接到一个对象(约会,人,...),并重定向到该对象(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

1 个答案:

答案 0 :(得分: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