0

だから私は別のコントローラー内でDeviseフォームとほとんど同じことをしようとしています

ログインフォームを別ページに工夫する

私は持っているヘルパーモジュールを持っています

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 edits が

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

<% raise resource.inspect %> を views/devise/sessions/new.html.erb に戻した場合

それでも #User not initialized> が表示されます

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 の未定義メソッド `[]'」を取得するのですか?

前もって感謝します。

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 に答える