2011-12-01 11 views
5

私がしたいことは、2つの異なるコントローラ、クライアントとテストのクライアントがあることです。クライアントコントローラは既に構築されており、クライアントのUIを使いながら、必要に応じて調整するために使用できるtest_clientコントローラを作成したいと考えています。私は主にクライアントに組み込まれている検証とそのデータをロードする管理コントローラへの依存を回避しようとしています。別のコントローラのビューをレンダリングする

私は、クライアントのUIを調整することができますので、私は、サンプルデータセットを読み込んで、クライアントコントローラのインデックスビューをレンダリングするtest_clientコントローラをします。それだけです。

私はtest_clientsインデックスメソッドでこれを試してみました:

class TestClient 
    def index 
     render :template => 'client/index' 
    end 
end 

が、それはそれは、現在のコントローラで見て彼らのために表示されるように、クライアントのパーシャルを見つけることができないので、私はエラーを取得...

だから私はこれをすでに見てきましたが、大抵の人はあなたが決してそのような呼びかけをしてはいけないと言いますが、このケースは合理的な使用法だと思います。

+0

gitを使用していますか?これはgitブランチIMHOの良いユースケースです。 – lucapette

+0

私は実際にsvnを使用していますが、それは良い考えです。私は次のプロジェクトでそれを試してみるかもしれません。 – german129

答えて

6

必要な部分のパスが'controller/partial'の形式になるようにビューを調整する必要があります。この場合はおそらく'client/partial'です。これで、以前のようにrender 'client/index'をそのまま使用することができます。

ですから、これを持ってどこかにあなたのビューで言う:

<%= render :partial => 'info' %> 

あなたはこれにそれを変更したくなるでしょう:

<%= render :partial => 'client/info' %> 
+0

このソリューションは、コントローラーの名前を変更しない限り、コントローラーをハードコーディングして私のために何もしないという巨大なファンではないが、うまく機能しました。 – german129

+1

これは複数のコントローラで使用されている部分的なものですが、通常は 'app/views/shared'の下に置いて、' render:partial => 'shared/info''などのようにします。それをより良い名前にしたいかもしれません。 – Mario

0

これはさまざまな方法で行うことができ、誰もが違います。あなたがそれを行うことができる1つの方法は、あなたのファインダーをプレゼンターに入れることです。次に、インデックスビューの一部のデータを部分的に変換するか、またはレイアウトをfalseに設定してテンプレートをレンダリングできます。

次に、client_testビューで、関連付けられているプレゼンターでそのインデックスをレンダリングできます。

2

すべてのための空のビューを作成して、パーシャルにあなたのクライアントコントローラのビューを変換しますtest_clientコントローラのアクションは、それぞれのtest_clientビューのクライアント部分を表示します。

例:
クライアント・ビューこのビューで
index.html.erb

test_clientビューを_index.html.erbする
index.html.erb、<% =レンダリング:部分= > 'clients/index'、:locals => {}%>

関連する問題