【问题标题】:Template is missing模板丢失
【发布时间】:2011-06-27 15:14:32
【问题描述】:

目前正在做一个项目,遇到了一个我以前从未遇到过的问题。目前正在做一个登录注册页面,要求用户注册。我之前有一个未定义的方法'name'错误,然后意识到该方法不叫name而是叫full_name。我浏览了所有文件夹以确保没有将任何方法或属性称为“名称”并将其重命名为“全名”。刷新浏览器后,我收到以下我从未见过的错误。有人可以解释一下这个错误是什么以及我如何解决它。

模板丢失

缺少模板用户/创建与 {:handlers=>[:erb, :rjs, :builder, :rhtml, :rxml], :formats=>[:html], :locale=>[:en, :en]} 在视图路径中 "C:/Users/patterd/Documents/Project/app/views"

【问题讨论】:

    标签: ruby-on-rails


    【解决方案1】:

    如果您不在控制器的 create 方法中重定向,则会发生此错误。

    你是在控制器的create方法中重定向还是渲染新表单,以防出错?

    如果没有控制器中create方法中的重定向,你需要创建一个名为create.html.erb的新文件。通常,成功创建后,您会重定向到其他页面,如下所示

    def create
      # some object you want to create
      # if the object.save is fine
      #   redirect_to object
      # else
      #   render new with the errors
      # end
    end
    

    【讨论】:

    • 我确实有一个 user_Controller,并且确实包含一个 create 方法。 'code'def create @user = User.new(params[:user]) if @user.save # 处理成功保存。 else @title = "Sign up" render 'new' end end
    • OK。保存后,重定向到某个页面,例如重定向 :action => :show,以便它转到您拥有的扩展名为 .html.erb 的页面之一。通常是 index.html.erb(redirect_to :action => :index) 或 show.html.erb(redirect_to :action => :show)
    • 哦,好的。我明白为什么我会收到此错误。非常感谢。
    • 感谢您的建议,也帮助了我。
    【解决方案2】:

    就我而言,我不得不处理和渲染视图。

    def return_payment
      # do lots of stuff
    
      head :ok
    end
    

    【讨论】:

      【解决方案3】:

      我遇到了同样的问题,原因是我不小心留下了其他空的“创建”方法:)

      【讨论】:

        【解决方案4】:

        一般会出现缺少模板错误 -当您没有该控制器方法的视图文件时,或者 - 如果一个方法只是用于没有任何视图文件的计算,那么您必须渲染/重定向该方法。

        如果您不渲染或重定向该方法,它将搜索当前方法名称的视图页面(在您的情况下它将搜索 create.html.erb)。因此,您必须渲染/重定向该方法。

        【讨论】:

          【解决方案5】:

          我遇到了同样的问题,刚刚添加了 redirect_to 就可以了!

          def update
              @visitor = Visitor.find(params[:id])
              if @visitor.update_attributes(visitor_params)
                 flash[:notice] = "Update ok!"
                 redirect_to root_path #just added this line and it worked!
              else
                 render 'edit'
              end
          end
          

          【讨论】: