2011-07-14 9 views
0

何らかの理由で、特定のコントローラの従来のパス名が機能していませんか? (Rails 3.1)Railsルーティング名の規則

私はryan bates nifty scaffoldを使ってコントローラを作成しました。ちょうどコントローラ、基本的なモデルはありません。

<p><%= link_to "New Project Templates", new_project_templates_path %></p> 

私はエラー

を得るしかし:私は私が持っている(アプリ/ビュー/ project_templates/index.html.erb)私の見解で

class ProjectTemplatesController < ApplicationController 
# a bunch of stuff 

    def new 
    @project = Project.new 
    end 

#more stuff 
end 

を持つコントローラで

undefined local variable or method `new_project_templates_path' for #<#<Class:0x2ab9c24>:0x2ab80e0> 

私のroutes.rbファイル他のすべてと同様に、コントローラとしてリソースを宣言しました

resources :project_templates 

私は

<%= link_to "New Project Templates", {:controller=>"project_templates, :action=>"new"} %>

を使用するようにリンクを変更する場合、それは完璧に動作します!この場合、action_controller_pathの命名規則はなぜ機能しませんか?

+0

new_project_template_pathは機能しますか?もしそうなら、それは利用ライブラリのためでしょう –

+0

'rake routes'をすでに実行して、それがそうであると思っているかどうかを確認しましたか? – polarblau

答えて

1

すべてのルートとその名前は、コマンドラインでrake routesと表示されます。

Railsはあなたが使用している複数化について知っていますので、魔法のようにそれを削除して、 's'なしでnew_project_template_pathという名前を付けることができますか?

+0

はい、実際には多元化されているため、new_project_template_pathは正常に動作します。ありがとうございます:) – Nick

0

あなたがresources :project_templatesを使用している場合は、あなたが安全にこのような何かを行うにできます。

link_to "All Project Templates", :project_templates 
link_to "New Project Template", [:new, :project_template] 
link_to "Edit Project Template", [:edit, @project_template] 
link_to "Show Project Template", @project_template 
link_to "Delete Project Template", @project_template, :method => :delete 
form_for ProjectTemplate.new do |f| 
form_for @projectTemplate do |f| 

この方法は、あなたが複数または単数の問題を覚えておく必要はありません。

もう1つのことは、あなたが実際にそれらをすべて[]にラップして、それらについて心配しないことです。

link_to "All PT", [:project_templates] 
link_to "Show PT", [@project_template] 
1

rakeルートを実行する可能性があることを前のポストに単純に補足しています。 POSIXシステムの場合は、grepなどのテキストフィルタを使用して結果を実行します。

rake routes | grep project 

または

bundle exec rake routes | grep project 

生成されたルートは、私は効率的にデータのクランチするためにコマンドラインツールの第一人者になることをお勧めして大projetsで非常に豊富であることを得ることができます。

+0

'bundle exec'を使う必要はありません。単に' bundle install --binstubs'と 'export PATH =。/ bin:$ PATH'を使うだけです。私が過去に行ったことは、 '.rvmrc'ファイルにエクスポート行を追加し、' .gitignore'を 'bin'で追加するだけです。 – recursive