所以我试图做与Devise form within a different controller
几乎相同的事情完全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
但我正在未定义的方法`[]'为nil:NilClass 就行了
<%= f.email_field :email, :autofocus => true %></div>
我把&lt;%raise resource.inspect%&gt;在views / devise / sessions / new.html.erb
中我在Home#index中获得了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
在Home#index中,我有以下
<div class="loginform" id="login">
<%= render :file => "devise/sessions/new" %>
</div>
如果views / devise / sessions / new.html.erb编辑为
,则错误“未定义的方法`[]'为nil:NilClass”将会消失<%= form_for(:user, :as => @user, :url => user_session_path(@user)) do |f| %>
但是如果把&lt;%raise resource.inspect%&gt;回到views / devise / sessions / new.html.erb
仍然会#User未初始化&gt;
在user.rb
中devise :database_authenticatable, :registerable, :confirmable,
:recoverable, :rememberable, :trackable, :validatable
在application_controller.rb
中class ApplicationController < ActionController::Base
protect_from_forgery
helper :all
end
使用'rails','3.2.11'
我不确定为什么辅助模块不能像资源那样工作。谁能帮我理解为什么?为什么得到“未定义的方法`[]'为nil:NilClass”?
提前谢谢你。
答案 0 :(得分: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| %>