2016-07-01 7 views
0

Ich fange an, in ROR zu entwickeln. Der Benutzerverlauf, den ich gerade mache, ist eine Kontaktseite. Die Codes für die MVC sind nachfolgend aufgeführt:ROR nicht initialisierte Konstante ContatosController :: Contato

app/Controller/contatos_controller.rb

class ContatosController < ApplicationController 

    def new 
    @contato = Contato.new 
    end 

    def create 
    @contato = Contato.new(secure_params) 
    if @contato.valid? 
     flash[:notice] = "Mensagem enviada de #{@contato.name}." 
     redirect_to root_path 
    else 
     render :new 
    end 
    end 

    private 

    def secure_params 
    params.require(:contato).permit(:name, :subject, :email, :content) 
    end 

end 

app/models/Contato.rb

class Contato 
    include ActiveModel::Model 
    attr_accessor :name, :string 
    attr_accessor :subject, :string 
    attr_accessor :email, :string 
    attr_accessor :content, :string 

    validates_presence_of :name 
    validates_presence_of :subject 
    validates_presence_of :email 
    validates_presence_of :content 
    validates_format_of :email, 
    with: /\A[-a-z0-9_+\.]+\@([-a-z0-9]+\.)+[a-z0-9]{2,4}\z/i 
    validates_length_of :content, :maximum => 500 

end 

app/views/contatos/new.html.erb

<h3>Contato</h3> 
<div class="form"> 
<%= simple_form_for @contato do |form| %> 
<%= form.error_notification %> 
<%= form.input :name, autofocus: true %> 
<%= form.input :subject %> 
<%= form.input :email %> 
<%= form.input :content, as: :text %> 
<%= form.button :submit, 'Submit', class: 'submit' %> 
<% end %> 
</div> 

config/routes.rb

Rails.application.routes.draw do 
    resources :contatos, only: [:new, :create] 
    root 'static_pages#home' 
end 

Wenn ich versuche, http://localhost:3000/contatos/new zuzugreifen, wird folgende Fehlermeldung angezeigt wird:

NameError in ContatosController#new 
uninitialized constant ContatosController::Contato 
app/controllers/contatos_controller.rb:4:in `new' 

Was ich über diesen Fehler gefunden ist, dass es Fehler in Beziehung steht , aber das scheint nicht mein Fall zu sein. Es ist wahrscheinlich ein dummer Fehler, aber ich konnte es nicht finden. Kann mir jemand helfen?

+1

Wahrscheinlich findet der Autoloader Ihre Modelldefinition nicht, da Ihr Dateiname groß geschrieben ist ('Contato.rb'). Versuchen Sie es zu verringern. –

+0

Sorry für die Verzögerung bei der Antwort, ich war bei der Arbeit. Vielen Dank für die Hilfe. Jetzt geht es. :) –

Antwort

0

Wie @Robert bereits in seinem Kommentar notiert hat, müssen Sie Ihre Contato Modelldatei in Kleinbuchstaben benennen.

Da jedoch Rubin in der Steuerung selbst (ContatosController::Contato) für Ihr Modell suchen, können Sie dieses Problem, indem sie doppelte Doppelpunkt vor dem Namen Modell wie folgt lösen:

@contato = ::Contato.new 

Dieser Ruby-Interpreter zwingen wird, zu Suchen Sie nach Contato Modell in der "root/top" Namescope.