Что такое Rails Way для запроса альтернативного просмотра всех записей? - PullRequest
1 голос
/ 23 января 2012

У меня есть приложение rails, у которого есть список Products, и поэтому у меня есть действие index на моем ProductsController, которое позволяет мне просмотреть список всех из них.

Я хочу получить еще один обзор продуктов, который предоставляет им гораздо больше информации и в другом формате - для чего предназначен Rails Way?

Я полагаю, мои основные варианты:

  1. передает параметр (products/index.html?other_view=true) и затем имеет блок if else в ProductsController#index, который при необходимости отображает другое представление. Это немного грязно.

  2. передать параметр (products/index.html?other_view=true) и затем иметь блок if else в моем представлении (index.html.haml), который отображает другой HTML по мере необходимости. (Я уже знаю, что это не правильный выбор.)

  3. Реализация нового действия на моем контроллере (например: ProductsController#detailed_index), которое имеет собственный вид (detailed_index.html.haml). Это уже не RESTful?

Является ли один из них предпочтительным или есть другой вариант, который я не рассматривал?

Спасибо!

Ответы [ 2 ]

2 голосов
/ 23 января 2012

Еще один способ сделать это будет через пользовательский формат.Обычно это делается для предоставления мобильных версий страниц, но я не понимаю, почему эту идею нельзя применить здесь.

Регистрация: детализированный как псевдоним text / html, а затем index.detailed.haml (или .erb) с дополнительной информацией.Если вам необходимо загрузить дополнительные данные для детального просмотра, вы можете сделать это в блоке respond_to.

Тогда посетители /somecollection/index.detailed должны увидеть подробный вид.Вы можете связать его с some_collection_path(:format=>'detailed')

Я не уверен, является ли это 'bettrr', чем альтернативы, но я думаю, что есть определенная логика, заключающаяся в том, что детальное представление - это просто альтернативное представлениеданные, для которых нужны форматы.

0 голосов
/ 24 января 2012

После прочтения я думаю, что добавление нового действия RESTful (вариант № 3 в моем вопросе) - это путь.Подробности здесь: http://guides.rubyonrails.org/routing.html#adding-more-restful-actions

Я обновил мой route.rb следующим образом:

resources :products do
  get 'detailed', :on => :collection
end

И добавил соответствующее действие к моему ProductsController:

def detailed
    # full_details is a scope that eager-loads all the associations
    respond_with Product.full_details
end

И затем, конечно, добавили detailed.html.haml представление, которое показывает продукты в подробном виде, который я хотел.Я могу связать это с detailed_products_path, который генерирует URL /products/detailed.

После реализации этого я уверен, что это был правильный путь.Как говорится в руководствах RoR, если я выполнял много пользовательских действий, это, вероятно, означает, что у меня должен быть другой контроллер, но только одно дополнительное действие, подобное этому, легко реализовать, оно СУХОЕ и работает хорошо.Это похоже на путь рельсов.: -)

...