0

所以我试图在不同的控制器中做与设计表单几乎相同的事情

完全在另一个页面上设计登录表单

我有一个帮助模块

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>

我把 <% raise resource.inspect %> 放在views/devise/sessions/new.html.erb

我在 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 %><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 编辑为

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

但是如果把 <% raise resource.inspect %> 放回views/devise/sessions/new.html.erb

仍然会得到#User not initialized>

在用户.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 的未定义方法 `[]'”?

先感谢您。

4

1 回答 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| %>
于 2013-03-28T01:09:38.430 回答