2014-09-08 7 views
0

Я пытаюсь создать форму, используя erb в приложении rails. Я постоянно получаю NoMethodError для строки # 3 моего .html.erb файла. Ниже миграция, контроллер, модель и .html.erbRails form_for NoMethodError

Ошибка "не определен метод` class_projects_path '"

миграции:

class CreateClassProjects < ActiveRecord::Migration 
    def change 
    create_table :class_projects do |t| 
     t.string :name 
     t.text :description 
     t.text :summary 
     t.text :github 
     t.text :other_url 

     t.timestamps 
    end 
    end 
end 

Модель:

class ClassProject < ActiveRecord::Base 
    attr_accessible :description, :github, :name, :other_url, :summary 
end  

контроллер:

class ClassProjectsController < ApplicationController 
    def new 
    @class_project = ClassProject.new 
    end 
end  

new.html.erb:

<h1>New Class Project</h1> 

    <%= form_for @class_project do |f| %> 

    <%= f.label :name %> 
    <%= f.text_field :name %> 

    <%= f.label :description %> 
    <%= f.text_field :description %> 

    <%= f.label :summary %> 
    <%= f.text_field :summary %> 

    <%= f.label :github %> 
    <%= f.text_field :github %> 

    <%= f.label :other_url %> 
    <%= f.text_field :other_url %> 

<% end %>  

Маршрута для хорошей меры:

get 'new_project' => 'class_projects#new', :as => 'new'  

Спасибо за любую помощь, inb4 учиться закодировать бугорок, используйте функцию поиска бугорок, и так далее.

ответ

3

Вам нужно использовать следующее:

#config/routes.rb 
resources :class_projects 

Это означает, что вы будете в состоянии использовать следующее:

#app/controllers/class_projects_controller.rb 
class ClassProjectsController < ApplicationController 
    def new 
     @class_project = ClassProject.new 
    end 
end 

#app/views/class_projects/new.html.erb 
<%= form_for @class_project do |f| %> 
    ... 
<% end %> 

-

Маршруты

Проблема у вас есть то, что вы не объявили полный комплект маршрутов для class_projects объектов. Rails работает resourceful (object orientated) систему маршрутизации, а это означает, что если вы вызываете resources директиву, вы будете обеспечены полной структуры CRUD маршрутизации:

enter image description here

Это означает, что если вы используете помощник, такие как form_for (который строит маршруты на основе предоставленного вами объекта), у вас будет , у вас есть, чтобы получить этот CRUD-комплимент установленных маршрутов.

Определение файла, как описано выше ваши маршруты даст вам возможность вызова form_for помощника безнаказанно (и никаких дополнительных аргументов)

+1

Спасибо, я добавил: url => 'new' в качестве аргумента, чтобы преодолеть действие формы по умолчанию в вызове метода form_for. Ты жжешь! – kschmit90

0

вы не определили маршрут ресурсов, так что ваша форма нуждается в дополнительной конфигурации

<%= form_for @class_project, url: new_path do |f| % 
+0

маршрут должен быть изменен, чтобы создать путь –

+0

он назвал свой маршрут 'как:«new'' –

+0

ну, я думаю, ему нужен еще один маршрут для сообщения –