2016-01-07 1 views
1

Я новичок в рельсах. Я пытаюсь создать форму с именем, адресом электронной почты, номером телефона и полями сообщений. При нажатии на кнопку, которая связана с формой я получаю сообщение об ошибке:OnClick получение неопределенного метода `model_name 'для NilClass: класс

undefined method `model_name' for NilClass:Class

Вот код _form.html.erb страницы:

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

     <ul> 
     <% @contact.errors.full_messages.each do |msg| %> 
     <li><%= msg %></li> 
    <% end %> 
    </ul> 
</div> 
<% end %> 

<div class="col-md-4"> 
<div class="form-group"> 
    <div class="field"> 
    <%= f.label :name %><br /> 
    <%= f.text_field :name, :class=>"form-control", :placeholder=>"Enter Your Name" %> 
    </div> 
    <div class="field"> 
    <%= f.label :email %><br /> 
    <%= f.text_field :email, :class=>"form-control", :placeholder=>"Enter Your Email"%> 
    </div> 
    <div class="field"> 
    <%= f.label :phone %><br /> 
    <%= f.text_field :phone, :class=>"form-control", :placeholder=>"Enter Your Phone Number"%> 
    </div> 
</div> 
</div> 
<div class = "col-md-8"> 
<div class="form-group"> 
    <div class="field"> 
    <%= f.label :description %><br /> 
    <%= f.text_area :description, :class=>"form-control", :size=>"20x5", :placeholder=>"Enter Your Message"%> 
    </div> 
</div> 
</div> 

<div class="actions"> 
    <%= f.submit "Submit", :class=> "button1"%> 
</div> 
<% end %> 

Это код contacts_controller. рубидия:

class ContactsController < ApplicationController 


    # GET /contacts/new 
    # GET /contacts/new.xml 

    def new 
    @contact = Contact.new 

    respond_to do |format| 
    format.html # new.html.erb 
    format.xml { render :xml => @contact } 
    end 
end 

# POST /contacts 
# POST /contacts.xml 
def create 
    @contact = Contact.new(params[:contact]) 

    respond_to do |format| 
    if @contact.save 
     format.html { redirect_to(root_path, :notice => 'Thank you for contacting us. We will get back to you shortly.') } 
     format.xml { render :xml => @contact, :status => :created, :location => @contact } 
     else 
     format.html { render :action => "new" } 
     format.xml { render :xml => @contact.errors, :status => :unprocessable_entity } 
     end 
    end 
    end 
end 

Кроме того, я добавил resources :contacts в файле routes.rb

Пожалуйста, помогите мне понять, в чем проблема. Спасибо.

+0

Можете скопировать и поместить здесь стек ошибок. –

+0

Надеюсь, вы определили Model contact.rb тоже, просто подтверждая? –

+0

Да, я определил модель contact.rb, а также – Dharmil

ответ

0

Пожалуйста, измените routes.rb на:

Использование

resources :contacts 

Вместо

resources: contacts 
+0

Спасибо, у меня есть это, что путь только на коде. Просто ошибка ввода с моей стороны. – Dharmil

0

Вы звоните в частичной @contact - это должна быть локальная переменная, определяемая при вызове частичное:

<%= render partial: "form", locals: { contact: @contact } %> 

... потом ...

#_form.html.erb 
<%= form_for contact do ... 

Ошибка model_name от form_for - когда он принимает объект, он будет искать атрибут model_name, чтобы заполнить путь и т.д.

Поскольку вы получаете сообщение об ошибке вместе с NilClass:Class, это говорит о том, что переменная @contact не определена.

Выше была моя рекомендация; вы не должны звонить @instance_variables в свои частичные.