2009-09-03 12 views
1

コントローラー関数と呼ばれる同じAjaxにさまざまな種類のオブジェクトを表示したいと思います。私はajax呼び出しを返すときレンダリングしたいです。問題は、あるオブジェクトの "title"属性と別のオブジェクトの "name"属性が必要なことです。私は2つのパーシャルをレンダリングすることはできませんし、オブジェクトがあるオブジェクトのタイプをチェックする方法を理解しているように見えるかもしれません。この問題をどうやって解決するのですか?Ruby on rails:2つの部分をレンダリングするか、クラスとオブジェクトの種類を調べる

はここ

@objects = Obj.find(:all,:conditions => ["name Like ?", "#{prefix}%"]) 
@moreObjects = ObjTwo.find(:all,:conditions => ["title Like ?","#{prefix}%"]) 

if @objects.empty? 
    render :text => "No Matches" 
else 
    render :partial => 'one', :collection => @objects 
end 

if @moreObjects.empty? 
    render :text => "No Matches" 
else 
    render :partial => 'two', :collection => @moreObjects 
end 
+0

「1」と「2」の部分はどのように見えますか?彼らは名前対タイトルの事を除いてかなり似ていますか、または他の差別化の点がありますか? –

答えて

1

あなたはObject.is_a?を使用することができますが、それは非常にきれいな解決策ではありません

<%= obj.title if obj.respond_to?(:title) %> 
0

のようなものを試してみてください(正しくない)私の現在のコントローラの設定です。プレゼンテーションの前にデータをマッピングして、ビューを軽量に保つこともできます。 -

+0

is_a?少なくとも基本的にはRubyの悪い習慣です。ダックタイピングについて聞いたことがありますか? –

+0

ええ、私は完全に同意します。はるかに良い解決策があります。上記のオブジェクト型チェックについての質問に答えるだけです。 – Kenny

1

ここでは、その型をチェック含まない一つの選択肢だあなたのObjとObjTwoクラスでは、新しいメソッドを追加:

def fancy_pants 
    title 
end 

def fancy_pants 
    name 
end 

を次に、あなたは@objects@moreObjectsを組み合わせることができます - ステートメントの場合は1をのみ必要になります1つは部分的です。

@search_domination = @objects + @moreObjects 

if @search_domination.empty? 
    render :text => "No Matches" 
else 
    render :partial => 'one', :collection => @search_domination 
end 
+0

私はこの答えのようなものを書いている最中でした。したがって、+1。 –

+0

ありがとうございましたグレッグ - あなたは何か異なったやり方をしていますか? (異様な名前の他に)私は常に新しい視点を探しています。 –

関連する問題