2011-09-16 9 views
0

私のアプリケーションでいくつかのモデルにいくつかのページ設定を追加する予定です。ここで重要な概念が欠落しているような気がします。ここに私のアプリケーションがあります:同じモデルの2つのコレクションにページを貼り付けます

class Gallery < ActiveRecord::Base 

    has_many :photos 
    has_many :comments 

end 

class GalleryController < ApplicationController 

    def show 
     # some process here 
     @gallery = Gallery.find(params[:id]) 
    end 

end 

私が表示しているギャラリーの写真とコメントの両方に別々にページを付けたいと思います。私はこれをAJAXでやる必要があります。写真やギャラリーのパラメータを指定して 'show'を呼び出すことは大変です(つまり、写真やコメントのみを探しているならギャラリーを探す必要があるのでしょうか?

この機能の設計方法を教えてください。

ここでGalleryController.showを呼び出す代わりに何がありますか?

答えて

0

私はこのようにそれを設定したい:

class GalleriesController < ApplicationController 
    def index 
    @galleries = Gallery.paginate(params) 
    end 
end 

class CommentsController < ApplicationController 
    def index 
    @comments = parent.comments.paginate(params) 
    end 

    def parent 
    @parent ||= Gallery.find(params[:gallery_id]) 
    end 
end 

class PhotosController < ApplicationController 
    def index 
    @photos = parent.photos.paginate(params) 
    end 

    def parent 
    @parent ||= Gallery.find(params[:gallery_id]) 
    end 
end 

# config/routes.rb 
resources :galleries do 
    resources :photos 
    resources :comments 
end 

次に、あなただけの要求:

/galleries/1/comments 
/galleries/1/photos 

このネストされたモデルパターンのinherited_resources宝石をチェックしてください。

しかし、理想的には、これをすべて1回のリクエストで取得したいと考えています。 this post on the Presenter Pattern in Railsをチェックしてください。

希望に役立ちます。

0

はい、私はあなたに定型コードをたくさん保存するので、inherited_resourcesの使用を絶対にお勧めします。 viatroposで説明されているようにこれらのリソースを設定し、JSON-responderを追加します(inherited_resourcesはコントローラにrespond_to :json, :htmlを追加するのと同じくらい簡単です)。 ajax側では、jquery.tmplmustache.jsなどのような魅力的なプラグインを使用し、各リソースのアイテムテンプレートを事前にレンダリングし、次にajaxを使用してページングされたデータをJSONとして取得し、テンプレートにレンダリングします。それは信じられないほど簡単ですが、もしあなたがステップハウプトを必要とするならば、ただ聞いてください。

関連する問題