所以我試圖做幾乎同樣的事情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」的未定義方法[]?
預先感謝您。
爲什麼你'@ User'而不是'@ user'(區別是字母'的情況下u')在erb文件中?通常情況下,實例變量以小寫字母開頭,可能是一個錯字 – pjam 2013-03-27 22:45:59
我只是試一試。 @user也不會給出錯誤。謝謝你指出。 – futureblind 2013-03-27 22:50:39
如果你的源代碼在github上,你能給出repo的URL嗎?我發現直接觸摸代碼可以更容易地解決這類問題。 – pjam 2013-03-27 23:34:58