我读了一本名为“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
?
答案 0 :(得分:1)
答案 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)