2011-06-22 4 views
0

Ruby on Railsを使用していて、多くのサブページで構成されるページを読み込もうとしています。各サブページはかなり異なり、各サブページのデータはコントローラ内の別のアクションによって生成されます。メインページが読み込まれると、対応するアクションを呼び出すことによって、サブページのコンテンツもロードします。複数のアクションをレンダリングして1回のリクエストで結果を返します

私の質問は、1つのページ要求時に複数のリクエストを異なるアクションに呼び出すことができるかどうかということです。もしそうなら、これを達成する最良の方法は何ですか?その結果、各アクションの結果のビューがページの右側に表示されます。それが不可能な場合、別のアクションから処理されたコンテンツを1回のリクエストでどのように読み込むことができますか?

サブページのアクションは、異なる場所から呼び出すことができます(サブページは別のページのコンポーネントでも、独自のページでも構いません)。コントローラーからアクションが呼び出されている場所を抽象化したいので、コントローラーによって生成されたデータに対して適切な部分をレンダリングするだけです。しかし、重要なのは、この部分がコントローラではなく、むしろその視点で決定されるということです。このようなことが行われましたか?もっと良い選択肢がありますか?

ありがとうございます!

答えて

0

あなたがしたいことは、別のアクションを呼び出すことで解決するべきではありません。

コントローラでは、表示するモデルを知っているので、それに応じて属性を設定します。あなたのビューで

@user = current_user 
@team = current_user.team.first 
@top_teams = Team.top5 # this is a scope returning the 5 top teams 

、あなたは、あなたのサイトのさまざまな部分

<%= render "users/parts/box", :user => @user %> 
<%= render "teams/parts/detail", :team => @team %> 
<%= render "teams/parts/top", :collection => @top_teams %> 

をレンダリングするパーシャルを使用し、私はあなたがOpensourcerails, which itself is open sourceを見てこの技術を利用している示唆しています。良い例は、ユーザーのショーアクションです。

0

私はあなたが望むものを正確には知りません。しかし、間違いなく、現在のアクションの一部としてビューを使って他のアクションをレンダリングすることはできません。

しかし、変数を設定し、対応する共通部分をビューファイルに含めるためのプライベートメソッドをコントローラに書き込むことができます。

これは一例です。このように

class UsersController < ... 
    def show 
    @user = current_user 

    setup_user_friends_widget(@user) 
    end 

    private 

    def setup_user_friends_widget(for_who) 
    @use_user_friends_widget= true 

    @friends = for_who.friends 
    end 
end 

# in your view users/show.html.erb 

<%- if @use_users_friend_widget %> 
    <%= render :partial => "shared/widgets/user_friends" 
<%- end %> 

# in shared/widgets/_user_friends 

<%- @friends.each do |friend| %> 
    # use the instance variables directly because you have to call the setup_user_friends_widget method before you could use this widget. 
    # so you are safe to use the instance variables instead of passing them from render :partial 

    ... 
%> 

、あなたがそれらを必要とする場合は、自動的にパラメータ、セッション、クッキーへのアクセス権を持つコントローラと、これらの方法でプライベートメソッドに出たもの共通のものを抽出することができます。

関連する問題