2011-03-06 6 views
0

はので、私は一つ一つのコントローラとの二つのモデルを持っています。今私はlocalhost/projects/newとうまく動作するプロジェクトを追加することができ、私はlocalhost/themes/newでテーマを追加することができます。しかし、それは私が望む方法ではありません。RoRの他のモデルに関連してコンテンツを追加

私はプロジェクトに関連するテーマを追加したいだけです。これを行うにはどうすればよいでしょうか?私はこのような何かを試しました:match "projects/:project_id/themes/new" => 'themes#new', :as => 'themes'が動作するようですが、私の新しいフォームを提出した後に何も起こりません。新しいフォームは、エラーメッセージやそのようなものなしで、再度レンダリングされます。

<form accept-charset="UTF-8" action="/projects/3/themes/new" class="new_theme" id="new_theme" method="post">

あなたは何が悪かったのか任意のアイデアを持っています:HTMLでの私のフォームタグには以下のようレンダリングされますか?そのようなものにはベストプラクティスがあります。なぜなら、それはしばしば欲しいモデルだと思うからです。

答えて

0

を使用します。あなたのルートで

は定義:

resources :projects do 
    resources :themes 
end 

それはまさにあなたが記載されているURLだけでなく、ヘルパーメソッドの束を作成します。完全なリストについてはthe rails guidesを参照してくださいが、ここでは例です:

あなたがprojects_theme_path(@project, @theme)を使用する単一のテーマに到達するために、またはあなたがprojects_themes_path(@project)を使用するプロジェクトのためにすべてのテーマを表示します。ここでも、すべての説明とすべてのヘルパーのためのレールガイドを参照してください。

また、rake routesを実行すると、EXACTヘルパーメソッドがプロジェクト用に設定されているので、いつでも参照できます。

+0

よく見えます! 'rake routes'ヒントも素晴らしい追加です。もう1つ:これを追加しても問題ありません。今私の新しいアクション '<%form_for @theme do | f | %> 'エラーが発生しました'ルートは一致しません{:controller => "themes"、:action => "create"} '私は私のform_forアクションを変更する必要がありますか? – choise

+0

あなたは 'form_for [@project、@theme] do | f |'を使う必要があります。ネストされたリソースの仕組みについて詳しくは、このレールキャストをご覧ください: – Andrew

+0

レールで楽しく過ごせません! – Andrew

2

あなたはこのような状況は、ネストされたリソースと呼ばれるnested resources

resources :projects do 
    resources :themes 
end 
0

https://github.com/josevalim/inherited_resourcesもチェックして、これらのルートのモデリングと実装を簡単にしてください。

+0

コア・レールの機能の代わりにプラグインを使用することは、彼が探しているものと全く同じですが、ネストされたルートについて知らなかった初心者のためには残念です。余分な複雑さを重ねる前に、レールのコアがどのように機能するかを学ぶことが重要です。 – Andrew

+0

私は同意しません。あなたのオプションが何であるかを知ることは知らないよりも優れています。 inherited_resourcesが彼の特定のプロジェクトのために頭を悩ましていると思いますか?私は彼がそれをチェックアウトするべきであると述べただけで、それを使用しない。 –

+0

十分に公正な、継承されたリソースは、道を見る価値がありますが、サイドノートを渡すことは答えとしてのコメントよりも適切です。 – Andrew

関連する問題