2014-10-08 93 views
0

我已經建立了設計和Omniauth(:推特),現在我得到,指出設計Omniauth錯誤

ArgumentError at /users/sign_up 
First argument in form cannot contain nil or be empty 

色器件/ new.html.erb

<h2>Sign up</h2> 

<%= simple_form_for(resource, as: resource_name, url: registration_path(resource_name)) do |f| %> 
    <%= f.error_notification %> 

    <div class="form-inputs"> 
    <%= f.input :email, required: true, autofocus: true %> 

    <% if f.object.password_required? %> 
     <%= f.input :password, required: true %> 
     <%= f.input :password_confirmation, required: true %> 
     <% end %> 
    </div> 

    <div class="form-actions"> 
    <%= f.button :submit, "Sign up" %> 
    </div> 
<% end %> 

<%= render "devise/shared/links" %> 

在第3行錯誤

我改成了

<%= simple_form_for(User.new, as: user url: user_registration_path(user)) do |f| %> 

^^ 現在工作,我知道這不應該做。所以我不知道「資源屬性」是什麼問題,但是它測試我的意志不會憤怒地翻轉這張桌子:)。任何見解都會很棒!

控制器代碼的要求

class OmniauthCallbacksController < Devise::OmniauthCallbacksController 

    def all 
    @user = User.from_omniauth(request.env['omniauth.auth']) 
     if @user.persisted? 
     flash.notice = "Signed in!" 
     sign_in_and_redirect user 
     else 
     session['devise.user_attributes'] = @user.attributes 
     redirect_to new_user_registration_path 
     end 
    end 

    alias_method :twitter, :all 
end 

,所以我通過建立有一項重新去了。從來沒有任何生成的控制器。他們由設計寶石處理。問題出在這個我以上面粗體顯示的「資源」變量上。出於某種原因,這是拋出一個錯誤。

+0

你可以發佈控制器代碼嗎? – Mandeep 2014-10-08 16:08:04

+0

當然。發佈。儘管爲Omniauth多數民衆贊成。我想我已經把它縮小爲一個設計問題。儘管如此。我不是那麼確定。 – 2014-10-08 16:10:36

+0

由於您在註冊表單中收到意想不到的行爲,所以問題應該在註冊控制器 – Mandeep 2014-10-08 16:15:43

回答

0

在user.rb文件

def self.from_omniauth(auth) 
    where(provider: auth.provider, uid: auth.uid).first_or_create 
    end 

    def self.new_with_session(params, session) 
    if session['devise.user_attributes'] 
     new(session['devise.user_attributes'], without_protection: true) do | user | 
     user.attributes = params 
     user.valid? 
     end 
    else 
     super 
    end 
    end 

    def password_required? 
    super && provider.blank? 
    end 

    def update_with_password(params, *options) 
    if encrypted_password.blank? 
     update_attributes(params, *options) 
    else 
     super 
    end 
    end 
end 

有一個在錯誤的地方結束:現在正常工作。