form_for方法未定义

时间:2012-08-16 03:56:41

标签: ruby-on-rails ruby-on-rails-3

我读了一本名为“Rails 3 in Action”的书,并做了两页:'index'和'new',设置routes.rb:

root :to => 'projects#index'
match '/new', to:'projects#new'

和projects_controller:

def new
  @project = Project.new
end

def create
  @project = Project.new(parmas[:project])
  @project.save
  flash[:notice] = "Project has been created"
  redirect_to @project
end

并查看文件:

index.html.erb

<%= link_to "new", new_path %>

这是正常的,因为我最终在localhost:3000/new,但问题是:

<%= form_for(@project) do |f| %>

这导致:

  

#&lt;#:0x416b830&gt;

的未定义方法`projects_path'

projects_path在哪里?当我打印<%= root_path %>时,我得到/,但<%= projects_path %>给出错误的未定义方法。

如何定义方法projects_path? Root不是projects_path

3 个答案:

答案 0 :(得分:1)

您应该在routes.rb

中为项目定义资源
resources :projects

这将生成帮助projects_pathothers

的banch

答案 1 :(得分:0)

match '/new', to:'projects#new'删除行routes.rb并添加:

resources :projects

答案 2 :(得分:0)

用于创建新项目的路径是指向“/ projects”索引URL的HTTP帖子。您需要指定此路线:

post "/projects", :controller => "projects", :action => "create", :as => "projects"

这将生成projects_path,这是您form_for正在寻找的辅助方法。

正如其他人所说,你应该使用resources :projects代替。如果您只想创建默认情况下创建的seven RESTful routes的子集,则可以使用:only

resources :projects, :only => %w(index new create)