2012-01-09 8 views
7

私は検索して検索しましたが、Rails 3のroutes.rbの構文を綴るページは見つかりませんでした。ガイドライン、概要、さらに高度な例がありますが、各キーワードの正確な構文を綴っていますか?このページRails routes.rbの構文

http://www.engineyard.com/blog/2010/the-lowdown-on-routes-in-rails-3/

は、高度な例がたくさん含まれているが、与えられたすべての例の動作を議論する時間がかかることはありません。誰かがroutes.rbの構文を破ったページに向けることができたら、私はそれを感謝します。

ここで私が解決しようとしている問題があります。私はmodelAとmodelBという2つのモデルを持っています。関係はmodelA has_many modelBとmodelB belongs_to modelAです。私はmodelAの名前空間の下でmodelBのコントローラを作成しました。だから私のレールのアプリのフォルダに、私は私のルートのようなことがしたい

app/controllers/modelA_controller.rb 
app/controllers/modelA/modelB_controller.rb 

を持っている:

http://localhost:3000/modelA/:modelA_id/modelB/ [index] 
http://localhost:3000/modelA/:modelA_id/modelB/:modelB_id [show] 
etc. 

私はroutes.rbをし、それのどれに次のようにしようとした作品:

resources :modelA do 
    resources :modelB 
end 
-- 
resources :modelA do 
    member do 
    resources :modelB 
    end 
end 
-- 
namespace :modelA do 
    resources :modelB 
end 
-- 
match '/modelA/:modelA_id/modelB/action', :to => '/modelA/modelB#action' 

私が試したことのいくつかは明らかに間違っていることは知っていますが、1つの問題で2日間過ごしたときは、何かが行きます!

+0

を行うことができ

class ModelBController < ApplicationController # controller code here end 

あなたは上のRailsのガイドを試してみましたルーティング? http://guides.rubyonrails.org/routing.html – leonardoborges

答えて

0

誰かがルーティング構文についての「決定的な」ガイドを持っていない理由は、かなり柔軟なので、おそらくその1つの主題のちょうどいくつかの章を書くことができるからです。しかし、私はお勧めします:あなたの質問からhttp://guides.rubyonrails.org/routing.html

を、あなたはmodelAmodelBを名前空間をしているように聞こえるが、あなたはまた、ルート自体の中にあることをmodelAためidをしたいです。あなたのModelBControllerのようなものに見える場合

だから:

class ModelA::ModelBController < ApplicationController 
    # controller code here 
end 

を次に、あなただけ行うことができます。

resources :modelA do 
    resources :modelB, :module => :modelA 
end 

はしかし、あなたはそのようなコントローラを名前空間にもよろしいですか?通常のhas_manyのようなネストされたリソースだけを必要とする場合は、modelAの下にmodelBの名前を付ける必要はありません。

/app 
    /controllers 
    /modelA 
     # some files 
    /modelB 
     # some files 

をそして、あなたのmodelBコントローラは、次のようになります:

代わりに、あなたが持っているだろう、あなたは

resources :modelA do 
    resources :modelB 
end 
+1

ありがとうございます!モデルAの下にmodelBを意図的に作成していませんでした。私は 'http:// myserver/modelB'がアクセスできず、' http:// myserver/modelA /:modelA_id/modelB'を介してしかアクセスできないようにリソースを入れ子にする方法を見つけようとしていました。レールはコントローラモデルA /モデルB 'を生成する。私はルートを使って私の本来の目標を達成し、コントローラーの範囲を決めるのではなくなったことを認識しました。私は初心者だと言うことができます。それは、どのような状況の下で推奨されているスコープですか? – pvenky

+0

そのようなコントローラーの名前は、それらを整理するためのものであり、単なる優先事項です。おそらく今必要でないルーティングに少し複雑さを加えるだけです。私は単純なネストされたリソースのルートで滞在することをお勧めします。 – iwasrobbed

関連する問題