Rails form_for NoMethodError

时间:2014-09-08 23:07:37

标签: ruby-on-rails activerecord migration

我正在尝试使用rails应用程序中的erb生成表单。我不断得到我的.html.erb文件第3行的NoMethodError。下面是迁移,控制器,模型和.html.erb

错误是"未定义的方法`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学习代码nub,使用搜索功能nub,等等。

2 个答案:

答案 0 :(得分: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运行resourcefulobject orientated)路由系统,这意味着如果您调用resources指令,您将获得完整的CRUD路由结构:

enter image description here

这意味着如果您使用诸如form_for之类的帮助程序(根据您提供的对象构建路径),您将 以设置此CRUD补充路由。

如上所述定义您的路线文件将使您能够有罪不罚地调用form_for助手(并且没有额外的参数)

答案 1 :(得分:0)

您没有定义资源路由,因此您的表单需要额外的配置

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