2016-07-01 17 views
0

RORで開発を開始しました。私が今行っているユーザー履歴はContact Pageです。 MVCのためのコードを以下に示す:/ROR未初期化定数ContatosController :: Contato

アプリ/コントローラ/ 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 

アプリ/モデル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 

アプリ/ビュー/ 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 

私がアクセスhttp://localhost:3000/contatos/newにしようとすると、次のエラーが表示されます

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

私は、このエラーに関する発見すると、それはタイプミスに関連していることですしかし、これは私のケースではないようです。それはおそらく愚かな間違いですが、私はそれを見つけることができませんでした。誰か助けてくれますか?

+1

ファイル名が大文字であるため、オートローダがモデル定義を見つけられない可能性があります( 'Contato.rb')。それを小文字にしてみてください。 –

+0

応答が遅れて申し訳ありません、私は仕事中でした。助けてくれてありがとうございました。今それは働いている。 :) –

答えて

0

@Robertは既にコメントしているので、Contatoモデルファイルを小文字にする必要があります。これは、にRubyインタプリタを強制します

@contato = ::Contato.new 

しかし、Rubyはコントローラ自体(ContatosController::Contato)でモデルを探しているので、あなたは、このようなモデル名の前にコロンを置くことによってこの問題を解決することができます「ルート/トップ」ネームスコープでContatoモデルを探します。

関連する問題