2009-03-21 9 views
0

私はRoRで最小限のWikiを設計しています。基本的にプロジェクトには多くのページがあります。すぐに私はをクリックして、しかしRailsでのルーティング

http://localhost:3000/teaching/main 

:これは、例えば、アクセスするには、このような「教育」プロジェクトの「メイン」のページを私を許す

map.root :controller => "projects" 
map.resources :projects, :has_many => :pages 
map.connect ':id', :controller => 'projects', :action => 'show' 
map.connect ':project_id/:id', :controller => 'pages', :action => 'show' 
map.connect ':controller/:action/:id' 
map.connect ':controller/:action/:id.:format' 

:私のルーティングファイルは次のようになります

http://localhost:3000/projects/teaching/pages/main 

URLを作成するヘルパーメソッドを、私が望むスキームに固執するにはどうすればよいですか?それは働いていなかったので、私はmap.connectのものを捨てるだろう...

答えて

0

Railsはすべて設定に関する慣習です。 Railsがもたらす利便性を望むならば、慣習に従わなければなりません。私は、RESTfulモデルに固執し、レールが現在やっていることを強く奨励します。

これで、おそらく一緒に何かをハックすることができます。それはきれいではなく、あなたがリンクを作りたいと思うたびに痛みを感じます。 map.resourcesはしたくないと2 map.connect年代はいずれかのお手伝いをしていないURLにあなたを送信しているものであるため、

だから最初

map.resources :projects, :has_many => :pages 
map.connect ':controller/:action/:id' 
map.connect ':controller/:action/:id.:format' 

を取り除きます。だから今だけ持っているべきである

map.connect ':project_id/:id', :controller => 'pages', :action => 'show' 
map.connect ':id', :controller => 'projects', :action => 'show' 

あなたがこれまで自分で作る必要があるリンクを作成したいとき。

<%= link_to 'Blah', :project_id => @project, :id => @project.pages.first %> 

などのようなものを使用することになります。私はそれが正確にルートを指定する方法であるかどうか分からないので、おそらく:project_idと:idシンボルを変更する必要があります。

私はあなたがそうしなければならないなら、あなたはこのルートを取ることを望んでいないと言いました。あなたの人生をはるかに簡単にするため、できる限り多くの慣習に従ってください。

1

を私は名前のルートを試してみましたが、私は何かを逃してしなければならない - それは非常にRESTfulなはない、とあなたは非常に混乱することができます。メンバーと::一見

は、私はあなたが使用できると思っていたコレクションのディレクティブは、あなたが欲しいものを追加するには、私はより密接に見たとき、私はそれが助けにはなりません実現しました。

私はあなたのデータモデルを理解することはほとんど困難を抱えている - のページには、多くのページを持つことができますか?それとも、プロジェクト名を教えて、ページを持っていますか?

その場合は、あなたはおそらくSubDomainFuのようなプラグインを見て、むしろルートファイルを直接ハッキングよりも、プロジェクト名に基づいてサブドメインを使用する必要があります。私たちはこれを使って、あなたが記述したようなスキーム(ドメインはプロジェクトを意味し、余分なコードが必要です)やteaching.yourdomain.comやlearning.yourdomain.comなどのスキームを提供しました。 SSLですが、それは別の話です)。

+0

'Teaching'はプロジェクトの名前です。はい、私はIDの代わりに名前に基づいてアドレスを指定しようとしています。私はSubDomainFuを見ていきます。 –

関連する問題