2009-07-09 11 views
2

Rails 2.3.2でRESTfulなルート生成の複数化に苦労しています。Rails、RESTfulルーティング、および複数化

具体的には、sitestatusというリソースがあります。この資源は実際には数えられません(鹿は鹿であり、deersではありません)。私がintializerで無制限と指定すると、いくつかのヘルパーが表示されますが、sitestatuses_pathは利用できません(これは意味があります)。

したがって、ジェスチャーに準拠するために、私はsitestatusを数えることができました。だから、Railsはsitestatussitestatuses(それほど恐ろしいことではない)を複数形化していますが、でもをとってこれをsitestatu(同時に、陽気で恐ろしいものがありません)に特異的にすると主張しています。

だから、私は私の大きなハンマーをホイップし、初期化子にこのコードを追加:

ActiveSupport::Inflector.inflections do |inflect| 
    inflect.plural "sitestatus", "sitestatuses" 
    inflect.singular "sitestatus", "sitestatus" 
end 

(注:私はirregularを使用してみましたし、それが正しく動作しませんでした)

は、これを行うに私を与えます私は私の見解でsitestatuses_pathへの呼び出しを試みるとき、私"sitestatus".pluralize、しかし、私は取得コンソールで期待される結果

undefined local variable or method 'sitestatuses_path' 

WHE nコンソールにActionController :: UrlHelperをロードし、sitestatus_path(123)と呼んで、私が期待する通りsitestatus/123を得る。しかし、私はsitestatuses_pathを呼び出すときに、私は

undefined method 'sitestatuses_path' for #<Object... 

を取得し、この名前は、モデルとコントローラの名前であり、それは本当に完璧オブジェクトのビジネス名とそのラインアップの両方のための唯一の論理名です。

私には何が欠けていますか?

+0

rakeルートを実行すると、ルートのリストに「sitestatuses」が表示されますか? –

+0

いいえ。getルートはsitestatus_indexとして存在しますが、ポストルートは実際には空白です。 –

+0

RESTはURI命名規則とは関係ありません。 – aehlke

答えて

2

さて、私はインフレクターを使用する必要はありませんでした。 Railsは既に単語sitestatusに関して正しいことをしていました。

2つの問題と、私が採用する必要があるいくつかの解決策がありました。

問題1:map.resources :sitestatusで、map.resources :sitestatusesではありませんでした。単語の最後にある "s"は、Railsがすでに複数形になっていると考えるようにしていました。したがって面白いsitestatu_pathヘルパー。

解決方法:Pluralize:sitestatus to:sitestatuses。

問題A:

これには二つの問題を作成したRailsは今コントローラは、それがない「Sitestatuses」と命名されたと仮定しました。 解決策A:コントローラの名前を変更するには、Railsルータが提供する:controller hash_heyを使用します。問題B:Railsは、生成したかったURLパスが/sitestatusesであると仮定しました。 解決策B::as hash_keyを使用して、生成されたURLの名前を変更します。

今、すべてが完全に機能します。

1

rake routesを呼び出すことで、ルートとそのURLにアクセスするための名前付きルートメソッド名を知ることができます。

関連する問題