2015-10-13 5 views
1

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

неопределенный метод `имя» для #

У меня есть это в моей БД/перенести файл:

class CreateContacts < ActiveRecord::Migration 
    def change 
    create_table :contacts do |t| 
    t.string :name 
    t.string :email 
    t.text :comments 
    t.timestamps 
    end 
    end 
end 

это на моем contacts_controller.rb файле:

class ContactsController < ApplicationController 
    def new 
     @contact = Contact.new 
    end 

    def create 
    end 
    end 

и это на моем pages_controller.rb:

class PagesController < ApplicationController 
    def homepage 
    end 

    def about 
    end 
    end 

Это мой HTML:

<div class="row"> 
<div class="col-md-4 col-md-offset-4"> 
<div class="well"> 
    <%= form_for @contact do |f| %> 
    <div class="form-group"> 
     <%= f.label :name %> 
     <%= f.text_field :name, class: 'form-control' %> 
    </div> 
    <div class="form-group"> 
     <%= f.label :email %> 
     <%= f.email_field :email, class: 'form-control' %> 
    </div> 
    <div class="form-group"> 
     <%= f.label :comments %> 
     <%= f.text_area :comments, class: 'form-control' %> 
    </div> 
    <%= f.submit 'Submit', class: 'btn btn-default' %> 
    <% end %> 
    </div> 
    </div> 
</div> 
+0

Какой учебник вы преследуете? –

+0

@RichPeck его курс, который я преследовал под названием CoderManual –

ответ

2

ли вы запустить миграцию?

Если нет, сделайте так:

bundle exec rake db:migrate 

Это создаст contacts таблицу в базе данных (которая имеет name колонку вместе с другими колонками email и comments, которые вы используете при строительстве своей формы). Кроме того, заново запустите сервер rails, а затем вы сможете использовать код формы без каких-либо проблем.

+0

Я использовал это много раз, а также db: drop, но не работал. Стол в db уже создан, я вручную создал его. Я не использовал рельсы. –

+0

Если вы перейдете к консоли рельсов и введите: «Contact.first» или «Contact.count», что вы видите? –

+1

@K M Rakibul, теперь это работает, я просто просто сделал всю работу с самого начала. –

0

Возможно, вы не перенесли свой стол.

В вашей консоли запуска:

rake db:migrate 

Затем перезапустите сервер и повторите попытку.

0

Другие ответы суммировал это хорошо - вам нужно мигрировать ваш contacts стол:

$ rake db:migrate 

Вы хотите read up on Rails migrations here.


Как и в сторону,

Страницы

Я не знаю, какой учебник все, кажется, следует, что это говорит вам использовать конкретные действия для статических страниц, которые ИМО это довольно плохая практика (особенно в долгосрочной перспективе).

много более универсальным (и «Railsy *) решение поместить контент для данных в базе данных, которые вы можете позвонить с модели - что позволяет иметь один show вид для всех ваши страницы:

#config/routes.rb 
resources :pages, only: [:show] 

#app/controllers/pages_controller.rb 
class PagesController < ApplicationController 
    def show 
     @page = Page.find params[:id] 
    end 
end 

#app/views/pages/show.html.erb 
<%= @page.title %> 
<%= @page.body %> 

Вы должны были бы создать еще одну миграцию для страниц DataTable, следующим образом:

$ rails g migration CreatePages 

class CreatePages < ActiveRecord::Migration 
    def change 
    create_table :pages do |t| 
    t.string :title 
    t.text :body 
    t.timestamps 
    end 
    end 
end 

$ rake db:migrate 

HTML

Ваш текущий HTML может быть намного более эффективным:

<div class="row"> 
    <div class="col-md-4 col-md-offset-4"> 
    <div class="well"> 
     <%= form_for @contact do |f| %> 
     <% attributes = {name: "text_field", email: "email_field", comments: "text_area"} %> 
     <% attributes.each do |attr,val| %> 
      <div class="form-group"> 
       <%= f.label attr.to_sym %> 
       <%= f.send(val, attr.to_sym, class: 'form-control') %> 
      </div> 
     <% end %> 
     <%= f.submit 'Submit', class: 'btn btn-default' %> 
     <% end %> 
    </div> 
    </div> 
</div> 
Смежные вопросы