Пагинация на две коллекции на одной модели - PullRequest
0 голосов
/ 16 сентября 2011

Я планирую добавить пагинацию к паре моделей в моем приложении, и мне кажется, что мне здесь не хватает ключевой концепции.Вот мое заявление:

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 здесь?

Ответы [ 2 ]

0 голосов
/ 17 сентября 2011

да, я бы абсолютно рекомендовал использовать значение атрибутатека.рф, так как это экономит много стандартного кода. просто настройте эти ресурсы, как описано в viatropos, добавьте JSON-responseder (с параметром наследованным_ресурсами это так же просто, как добавить respond_to :json, :html к вашему контроллеру). затем на стороне ajax используйте соблазнительный плагин, например jquery.tmpl или mustache.js или любой другой, предварительно отрендируйте шаблон элемента для каждого ресурса, а затем используйте ajax для получения разбивает на страницы данные как JSON и отображает их в ваших шаблонах. это невероятно легко, но если вам нужно пошаговое руководство, просто спросите.

0 голосов
/ 17 сентября 2011

Я бы настроил это так:

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

Проверьте гем наследованный_ресурсы для этой вложенной моделиpattern.

Но в идеале вы бы хотели получить все это одним запросом.Прочтите этот пост по шаблону Presenter в Rails .

Надеюсь, это поможет.

...