首页 文章

在不同的视图中设计表单“未定义的方法`[]'为nil:NilClass”

提问于
浏览
0

所以我试着和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

但是我正在接受 undefined method `[]' for nil:NilClass

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

我在views / devise / sessions / new.html.erb中添加了<%raise resource.inspect%>

我在Home#index #User not initialized 得到了RuntimeError

<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 %>
<%= f.email_field :email, :autofocus => true %></div> <div><%= f.label :password %>
<%= 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”的错误“undefined method` []'将会消失

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

但是如果将<%raise resource.inspect%>放回views / devise / sessions / 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

使用'rails','3.2.11'

我不确定为什么辅助模块不能像资源那样工作 . 谁能帮我理解为什么?为什么得到“未定义的方法`[]'为nil:NilClass”?

先感谢您 .

1 回答

  • 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| %>
    

相关问题