2012-01-20 4 views
10

ImplicitTestというモデルがあります。これは、Testと呼ばれるRubyオブジェクトを持っているだけで、Railsで多くのことを壊していると言われています。リソースモデル名がパスまたはコントローラと一致しない場合のルーティングの記述方法

しかし、まだtest(例:/tests/test/1/editなど)というRESTfulリソースとして公開したいと考えています。さらに、コントローラーをTestsControllerとしておくことは素晴らしいことですが、あまり重要ではありません。

(私はroutes.rbをファイルに簡単なresources :testsラインを持っていることによって、これをやっていたが、これはRESTfulなフォームのために失敗した例<%= form_for @test ... > - これは@Testオブジェクトの型がImplciitTestであることを拾い、そしてimplicit_test_pathを検索しようとしています存在しません。

を私は別の接頭辞を使用するために)(のform_for尋ねるの誰も、単一の、統一された方法はありませんでした、オプションのform_for追加しようとしたが、両方neweditアクションのためのフォームの仕事を持っているという結論に達しました

私はルーティングから問題にアプローチしようとしています側。私をできるようになります私は、routesファイルに追加することができますがラインです:

  1. はImplicitTest
  2. と呼ばれるモデルをお持ちのテスト
  3. は<% =のform_for @Testを使って/としてパスを持っています.. 。%>タグはまだ
  4. は私がこれを行うには、ゴールデンパスを逸脱しています知っているが、Railsが、私はモデル名としてテストを使わせていないが、この

(オプション)TestsControllerとしてのコントローラをキープユーザーが期待する名前ですこのリソースのURLを参照してください。これを有効にする単純なルーティングオプションがあることを期待しています。

答えて

8

あなたがする必要があるすべてはあなたのルート上:pathオプション設定されている:あなたのコードを変更するに発散する必要はありませんので、あなたはまだ、あまりにも、この方法の標準implicit_tests_pathヘルパーを使用することになり

resources :implicit_tests, :path => '/test' 

をURLスキーム。

+2

これはコントローラの名前を調整するようには見えませんでしたが、リソース:implicit_tests、:controller => "tests"、:path => "tests" 'に調整しているようです。 – Phantomwhale

1

私は必要なものを得るのcoreywardの答えを見て、私は短い間でつまずいたが、あまり直感的な方法ながら:

resources :tests, :as => "implicit_tests"

これらは本質的に同じことをやっています(私は追加の余分な:controllerスイッチを与えられましたコメントに)?または1つは好ましいですか?

+0

これもまた、「Rails Way」に実際には適合しない暗黙のテストコントローラーとモデルへの混在参照は混乱し始めます。 – coreyward

+1

ああ、それほど考えた。私ができるようにレールの近くで試してみるのは楽しいので、私はあなたの答えに行くでしょう。また、ルーティングオプションの数を低く抑え、コントローラ名をモデル名に近づけるために、ImplicitTestControllerを使用することに戻ります。これはおそらく、パス名に近いほうがよいでしょう。基本的に上記のあなたの提案。 – Phantomwhale

関連する問題