渲染会丢失模板错误

时间:2014-01-23 10:24:10

标签: ruby-on-rails ruby devise render

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

{ :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 auth数据之前,我需要向用户询问联系号码,其余表格需要从@user数据中填写。因此,我不能在这种情况下使用重定向。

2 个答案:

答案 0 :(得分:0)

Missing template users/registrations/new表示您必须在名为app/views/users/registrations/的{​​{1}}下创建模板文件。 (请参阅例外中的new.html)。

然而,正如@Marek Lipka所说,你滥用渲染,所以你应该看看下面的guide

答案 1 :(得分:0)

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