0

「Rails 3 in Action」という本を読んで、「index」と「new」の 2 つのページを作成し、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| %>

これにより、次の結果が得られます。

#<#: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

The path used to create new projects is a HTTP post to the index URL of "/projects". You need to specify this route:

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

This will generate a projects_path, which is the helper method your form_for is looking for.

As others have said, you should probably use resources :projects instead. If you're interested in only creating a subset of the seven RESTful routes created by default, you can use :only:

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

match '/new', to:'projects#new'から行を削除し、routes.rbこれを追加します。

resources :projects
于 2012-08-16T04:04:02.737 に答える