2013-09-30 9 views
9

Si verifica un errore durante la visita di /users/new in Rails 4 come Unable to autoload constant UsersController, expecting /app/controllers/users_controller.rb to define it.ricevendo un errore come Impossibile caricare automaticamente UserController

Ecco il codice del controller

class UserController < ApplicationController 
    def new 
     @user = User.new 
    end 

    def create 
     @user = User.new(params[:user]).permit(:email, :password,:password_confirmation) 

     respond_to do |format| 
     if @user.save 
     format.html { redirect_to new_user_path, notice: 'User was successfully created.' } 
     format.json { render action: 'show', status: :created, location: @user } 
     else 
     format.html { render action: 'new' } 
     format.json { render json: @user.errors, status: :unprocessable_entity } 
     end 
     end 
    end 
    end 

E la vista per new.html.erb quello che ho è:

<h1>Sign up</h1> 

    <%= form_for(@user) do |f| %> 

    <% if @user.errors.any? %> 
     <div id="error_explanation"> 
     <h2><%= pluralize(@user.errors.count, "error") %> prohibited this post from being  saved:</h2> 

     <ul> 
      <% @user.errors.full_messages.each do |msg| %> 
      <li><%= msg %></li> 
      <% end %> 
     </ul> 
    </div> 
    <% end %> 
    <div class="field"> 
    <%= f.label :email %><br> 
    <%= f.text_field :email %> 
    </div> 
    <div class="field"> 
    <%= f.label :password %><br> 
    <%= f.password_field :password %> 
    </div> 
    <div class="field"> 
    <%= f.label :password_confirmation, "Confirmation" %> 
    <%= f.password_field :password_confirmation %> 
    </div> 
    <div class="actions"> 
    <%= f.submit "Create my account" %> 
    </div> 
<% end %> 

User modello:

class User < ActiveRecord::Base 
    has_many :projects 
    has_many :pledges 
    has_many :posts 
    has_many :comments 
end 
+6

Change 'UserController' a' UsersController' (per convenzione a rotaie, nomi di controller dovrebbe essere la forma pluralizzato della risorsa). –

+0

Grazie a @ZachKemp. Ha funzionato per me. – Preethika

risposta

14

Rails si aspetta nomi di controller da pluralizzati. La prima riga dei primi contenuto del file che hai postato è scritto come singolare:

In /app/controllers/users_controller.rb si hanno:

classe utente controller < ApplicationController

Invece, dovrebbe essere :

classe Utenti controller < ApplicationController


Questa Rails Guide fornisce un esempio per la definizione di una risorsa nel file percorsi. Inoltre, vi è una nota informativa che spiega che la definizione di percorsi con il metodo resource verrà sempre associata al nome pluralizzato del controller.

Questa è la nota informativa della guida.

Perché si potrebbe desiderare di utilizzare lo stesso controller per un percorso singolare (/ account) e un percorso plurale (/ account/45), risorse singolari mappa per controllori plurali. Ad esempio, risorsa: foto e risorse: le foto creano percorsi sia singolari che plurali che si associano allo stesso controller (PhotosController).

fonte: Resource Routing: The Rails Default

+0

Puoi citare la tua fonte di "Rails si aspetta che i nomi dei controller siano pluralizzati". – yekta

+0

@yekta Ho aggiunto alcune informazioni aggiuntive con una fonte. Ciò sottolinea il fatto che i controllori pluralizzati sono convenzionali. Le informazioni sono sepolte in una nota a margine. La pluralizzazione è implicita in tutte le guide e Rails stessa. È possibile sovrascrivere il valore predefinito e utilizzare un controller singolare. – sealocal

+0

Grazie per la fonte. La pluralizzazione non ha risolto il mio problema. Nel mio caso stavo usando 'Unloadable' in ApplicationController, rimuovendolo risolto. – yekta

Problemi correlati