【问题标题】:render gives missing template error渲染给出缺少模板错误
【发布时间】:2014-02-13 20:00:57
【问题描述】:

缺少模板用户/注册/新用户:

{ :locale=>[:en], 
  :formats=>[:html], 
  :handlers=>[:erb, :builder, :raw, :ruby, :jbuilder, :coffee]

关注

redirect_to new_user_registration_url

工作正常

render new_user_registration_url

给出上述错误。

class Users::OmniauthCallbacksController < Devise::OmniauthCallbacksController

  def facebook

    @user, new_record = User.find_or_create(request.env["omniauth.auth"], current_user)

    if @user.persisted?

      if new_record

        sign_in @user

        redirect_to basic_profile_detail_path

      else

        sign_in_and_redirect @user, :event => :authentication 

        set_flash_message(:notice, :success, :kind => "Facebook") if is_navigational_format?

      end

    else

      session["devise.facebook_data"] = request.env["omniauth.auth"]

      render new_user_registration_url

    end

  end

end

这是我的控制器,但是在保存 facebook 身份验证数据之前,我需要向用户询问联系号码,并且表格的其余部分需要从 @user 数据中填写。因此在这种情况下我不能使用重定向。

【问题讨论】:

  • 显示您的控制器代码。而且,顺便说一句,您误用了render,所以我建议您阅读一下,例如:guides.rubyonrails.org/layouts_and_rendering.html
  • 发现我需要使用渲染“设计/注册/新”,因为它是从设计控制器继承的。

标签: ruby-on-rails ruby devise render


【解决方案1】:

90% 的时间我看到这个错误是因为我应该使用

redirect_to '/some-unique-url-in-my-app`

而不是

render '/some-unique-url-in-my-app`

剩下的时间是因为没有html.erb 文件与应用程序期望找到的匹配。例如,如果您有 render "articles/show",那么您的应用会期望找到一个名为 app/views/articles/show.html.erb 的文件

还有一个很好的例子here

【讨论】:

    【解决方案2】:

    Missing template users/registrations/new 表示你必须在app/views/users/registrations/ 下创建一个名为new.html 的模板文件。 (见异常中的formats)。

    尽管如此,正如@Marek Lipka 所说,您误用了渲染,所以您应该看看以下guide

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-02-26
      • 2015-11-21
      • 2011-11-09
      • 2017-07-03
      • 2021-02-01
      • 2013-05-13
      • 1970-01-01
      相关资源
      最近更新 更多