2013-03-27 16 views
0

所以我試圖做幾乎同樣的事情Devise form within a different controller設計形式「「爲無未定義的方法`[]:NilClass」

正是Devise Login Form on another page

我有了一個輔助模塊

def resource_name 
    :user 
end 

def resource 
    @resource ||= User.new 
end 

def devise_mapping 
    @devise_mapping ||= Devise.mappings[:user] 
end 

,但我得到未定義的方法`[]」的零:NilClass上線

<%= f.email_field :email, :autofocus => true %></div> 

我把<%提高resource.inspect的觀點%> /設計/會話/ new.html.erb

和我家#指數得到RuntimeError #User未初始化

<h2>Sign in</h2> 

<%= form_for(resource, :as => resource_name, :url => user_session_path(resource_name)) do |f| %> 
    <% raise resource.inspect %> 
    <div><%= f.label :email %><br /> 
    <%= f.email_field :email, :autofocus => true %></div> 

    <div><%= f.label :password %><br /> 
    <%= f.password_field :password %></div> 

    <% if devise_mapping.rememberable? -%> 
    <div><%= f.check_box :remember_me %> <%= f.label :remember_me %></div> 
    <% end -%> 

    <div><%= f.submit "Sign in" %></div> 
<% end %> 

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

我也試過這種的幫助模塊

def resource_name 
    :user 
end 

def resource 
    @resource = User.new 
end 

def devise_mapping 
    @devise_mapping = Devise.mappings[:user] 
end 

在首頁#指數,我有以下

<div class="loginform" id="login"> 
    <%= render :file => "devise/sessions/new" %> 
</div> 

錯誤 「未定義的方法`[]」爲無:NilClass」 將於如果意見/設計/會話/ new.html.erb編輯是

<%= form_for(:user, :as => @user, :url => user_session_path(@user)) do |f| %> 

走了,但如果把<%提高resource.inspect%>早在視圖/設計/會話/ new.html.erb

仍然會得到#User未初始化>

在user.rb

devise :database_authenticatable, :registerable, :confirmable, 
    :recoverable, :rememberable, :trackable, :validatable 

在application_controller.rb

class ApplicationController < ActionController::Base 
    protect_from_forgery 
    helper :all 
end 

使用「軌道」,「3.2.11」

我不知道爲什麼輔助模塊不工作,它假定是資源的方式。任何人都可以幫我理解爲什麼?以及爲什麼要獲得「nil:NilClass」的未定義方法[]?

預先感謝您。

+1

爲什麼你'@ User'而不是'@ user'(區別是字母'的情況下u')在erb文件中?通常情況下,實例變量以小寫字母開頭,可能是一個錯字 – pjam 2013-03-27 22:45:59

+0

我只是試一試。 @user也不會給出錯誤。謝謝你指出。 – futureblind 2013-03-27 22:50:39

+0

如果你的源代碼在github上,你能給出repo的URL嗎?我發現直接觸摸代碼可以更容易地解決這類問題。 – pjam 2013-03-27 23:34:58

回答

0

我覺得這條線

<%= form_for(:user, :as => @user, :url => user_session_path(@user)) do |f| %> 

應該

<%= form_for(@user, :as => :user, :url => user_session_path(@user)) do |f| %> 
+0

哦,對!我搞砸了變量。<%= form_for(resource,:as => resource_name,:url => user_session_path(resource_name))do | f | %>應該是<%= form_for(resource_name,:as => resource,:url => user_session_path(resource_name))do | f | %>很可愛,謝謝! – futureblind 2013-03-28 01:49:08

相關問題