0

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

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

和项目控制器:

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| %>

这导致:

#<#:0x416b830> 的未定义方法“projects_path”

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

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

4

3 回答 3

1

您应该在 routes.rb 中为项目定义资源

resources :projects

这将产生助手projects_path其他人

于 2012-08-16T04:04:43.070 回答
0

删除该行match '/new', to:'projects#new'routes.rb添加以下内容:

resources :projects
于 2012-08-16T04:04:02.737 回答
0

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

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

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

正如其他人所说,您可能应该resources :projects改用。如果您只想创建默认创建的七个 RESTful 路由:only中的一个子集,则可以使用:

resources :projects, :only => %w(index new create)
于 2012-08-16T04:25:48.103 回答