3

以下に投稿されているlayouts/application.html.erbにフォームがあり、その行<%= devise_error_messages! %>を追加すると、以下のエラーが発生します。

ページ分割せずにdevise_error_messagesを追加するにはどうすればよいですか?

/app/views/layouts/application.html.erb

<%= form_for(resource, :as => resource_name, :url => registration_path(resource_name)) do |f| %>
    <%= devise_error_messages! %>  <!-- this line causes issues -->
    <h3>Add new contact</h3>
    First Name<br />
    <%= f.text_field :username %><br />
    Last Name<br />
    <%= f.text_field :password %><br />
    <%= f.text_field :password_confirmation %><br />                                
    Email<br />
    <%= f.text_field :email %>
    <hr />
    <%= f.submit "Add Contact" %>

<% end %>

エラー:

NoMethodError in My_devise/sessions#index

Showing /app/views/layouts/application.html.erb where line #59 raised:

undefined method `errors' for nil:NilClass

Extracted source (around line #59):

56:                             <a href="#" class="has-popupballoon button button-blue"><span class="add"></span>New Contact</a>
57:                             <div class="popupballoon top">
58:                             <%= form_for(resource, :as => resource_name, :url => registration_path(resource_name)) do |f| %>
59:   <%= devise_error_messages! %>
60:                                 <h3>Add new contact</h3>
61:                                 First Name<br />
62:                                 <%= f.text_field :username %><br />

これは私が使用しているURLであり、これがhttp://localhost:3000/admin/home私のroutes.rbです。

devise_for :users do 
    get '/users/sign_out' => 'devise/sessions#destroy' 
    get "/users/sign_in", :to => "my_devise/sessions#new"
    get 'admin/home', :to => 'my_devise/sessions#index'
    get 'users/sign_up', :to => 'my_devise/registrations#new'
  end 

  devise_for :users, :controllers => {:sessions => "my_devise/sessions", :registrations => "my_devise/registrations"}
  get "home/index"
  root :to => "home#index"

/app/controllers/my_devise/sessions_controller.rb

class MyDevise::SessionsController < Devise::SessionsController
    layout false

    before_filter :authenticate_user!

    def index
        render :layout => 'application'
    end

    def new
        super
    end

    def create
        super
    end

end

/app/controllers/my_devise/registrations_controller.rb

class MyDevise::RegistrationsController < Devise::RegistrationsController

    def index

    end

end

レーキルート:

users_sign_out GET    /users/sign_out(.:format)      {:controller=>"devise/sessions", :action=>"destroy"}
           users_sign_in GET    /users/sign_in(.:format)       {:controller=>"my_devise/sessions", :action=>"new"}
              admin_home GET    /admin/home(.:format)          {:controller=>"my_devise/sessions", :action=>"index"}
           users_sign_up GET    /users/sign_up(.:format)       {:controller=>"my_devise/registrations", :action=>"new"}
        new_user_session GET    /users/sign_in(.:format)       {:action=>"new", :controller=>"devise/sessions"}
            user_session POST   /users/sign_in(.:format)       {:action=>"create", :controller=>"devise/sessions"}
    destroy_user_session DELETE /users/sign_out(.:format)      {:action=>"destroy", :controller=>"devise/sessions"}
           user_password POST   /users/password(.:format)      {:action=>"create", :controller=>"devise/passwords"}
       new_user_password GET    /users/password/new(.:format)  {:action=>"new", :controller=>"devise/passwords"}
      edit_user_password GET    /users/password/edit(.:format) {:action=>"edit", :controller=>"devise/passwords"}
                         PUT    /users/password(.:format)      {:action=>"update", :controller=>"devise/passwords"}
cancel_user_registration GET    /users/cancel(.:format)        {:action=>"cancel", :controller=>"devise/registrations"}
       user_registration POST   /users(.:format)               {:action=>"create", :controller=>"devise/registrations"}
   new_user_registration GET    /users/sign_up(.:format)       {:action=>"new", :controller=>"devise/registrations"}
  edit_user_registration GET    /users/edit(.:format)          {:action=>"edit", :controller=>"devise/registrations"}
                         PUT    /users(.:format)               {:action=>"update", :controller=>"devise/registrations"}
                         DELETE /users(.:format)               {:action=>"destroy", :controller=>"devise/registrations"}
        new_user_session GET    /users/sign_in(.:format)       {:action=>"new", :controller=>"my_devise/sessions"}
                         POST   /users/sign_in(.:format)       {:action=>"create", :controller=>"my_devise/sessions"}
    destroy_user_session DELETE /users/sign_out(.:format)      {:action=>"destroy", :controller=>"my_devise/sessions"}
                         POST   /users/password(.:format)      {:action=>"create", :controller=>"devise/passwords"}
                         GET    /users/password/new(.:format)  {:action=>"new", :controller=>"devise/passwords"}
                         GET    /users/password/edit(.:format) {:action=>"edit", :controller=>"devise/passwords"}
                         PUT    /users/password(.:format)      {:action=>"update", :controller=>"devise/passwords"}
                         GET    /users/cancel(.:format)        {:action=>"cancel", :controller=>"my_devise/registrations"}
                         POST   /users(.:format)               {:action=>"create", :controller=>"my_devise/registrations"}
                         GET    /users/sign_up(.:format)       {:action=>"new", :controller=>"my_devise/registrations"}
                         GET    /users/edit(.:format)          {:action=>"edit", :controller=>"my_devise/registrations"}
                         PUT    /users(.:format)               {:action=>"update", :controller=>"my_devise/registrations"}
                         DELETE /users(.:format)               {:action=>"destroy", :controller=>"my_devise/registrations"}
              home_index GET    /home/index(.:format)          {:controller=>"home", :action=>"index"}
                    root        /                              {:controller=>"home", :action=>"index"}
                    root        /                              {:controller=>"home", :action=>"index"}
4

3 に答える 3

2

私は同様の問題があるかもしれないものを持っていました。

それを理解するのにしばらく時間がかかりましたが、私の場合はこれが原因でした:

def current_user
  @current_user ||= User.find(session[:user_id]) if session[:user_id]
end
helper_method :current_user

私のapplication_controller.rbファイルにあります。

チュートリアルからこの行を追加しました。これを削除した後、「devise_error_messages」に関するエラーは表示されなくなりました。なぜこれが物事を混乱させるのかよくわかりません。おそらく「current_user」が他の場所で定義されており、エラーオブジェクトを設定します(または設定につながります)。

于 2012-08-05T12:22:40.200 に答える
0

devise_forルーティングを変更してみてください。このドキュメントをチェックしてくださいhttp://rdoc.info/github/plataformatec/devise#Configure_routes

:pathパラメーターを使用して独自のプレフィックスを追加できます

これがサンプルです

devise_for :users, :path => "", :path_names => {
 :sign_in => 'signin',
 :sign_out => 'signout',
 :sign_up => 'signup'            
 },
:sign_out_via => [:delete],

 :controllers => {:sessions => 'my_devise/sessions', :registrations => 
  'my_devise/registrations'}
于 2012-06-27T05:14:54.597 に答える
0

しばらく触れていないプロジェクトを再検討しますが、簡単な答えは、application_controllerでUserオブジェクトを作成することでした。

このスニペットをapplication_controllerに追加しました:

before_filter :instantiateUser

def instantiateUser
    @user = User.new
end
于 2012-10-15T01:45:11.660 に答える