Rails: разница между списком и индексом - PullRequest
1 голос
/ 25 июня 2010

Я ценю, что это невероятно нубский вопрос, но, имея в Google несколько комбинаций поисковых терминов, я, к сожалению, все еще в неведении.Эти вещи могут быть трудными, когда кто-то не знает, и настолько очевидными, когда кто-то знает.

У меня есть полу-домашняя страница, где входящие клиенты могут выбрать просмотр запрошенного списка или несколько других вещей.Это не домашняя страница, а своего рода мини-коммутатор на сайте.

Существует семь стандартных методов контроллера RESTful Rails (насколько я понимаю):

List # shows a list of records generated with .find(:all)
Show # shows details on one record
New # initiates new record
Create # saves and renders/redirects
Edit # finds and opens existing record for edit
Update # updates attributes
Delete # deletes record
  1. Что использовать, когда некоторым пользователям нужно видеть выбранный «список» записей, который не является буквально .find (: все)?Как бы это работало, учитывая, что мне все еще нужна функция списка, которая дает мне .find (: all) для других целей?
  2. Я слышал об использовании 'index' в контроллерах Rails, но я не знаюразница между индексом и списком.
  3. Для наилучшей практики и наилучшего дизайна, какие методы контроллера вы бы использовали для мини-коммутатора (и других промежуточных страниц, таких как «О нас»)?

Любые конкретные ответы будут немного более полезны, чем ссылки на http://guides.rubyonrails.org/action_controller_overview.html и т. Д. :) Большое спасибо.

1 Ответ

2 голосов
/ 25 июня 2010

Во-первых, я думаю, важно отметить, что «стандартные методы» не являются ни стандартами, ни методами в некотором смысле.Это считается действиями, и они являются стандартными в том смысле, что они являются соглашениями, используемыми с лесами.Вы можете создать любое количество действий и логически сгруппировать их с помощью контроллера.

Если вы откроете [Project] /config/routes.rb и прочитаете комментарии, я думаю, что вы 'Я немного лучше пойму, как контроллеры и действия отображаются на конкретный маршрут.Например, вы можете создать именованный маршрут к действию входа в систему контроллера входа и вызвать его аутентификацию, добавив в начало ваших маршрутов. Rb:

# ex: http://localhost/authenticate
map.authenticate 'authenticate', :controller => 'login', :action => 'login'
# map.[route] '[pattern]', :controller => '[controller]', :action => '[action]'

#  ex: http://localhost/category/1
map.category 'category/:id', :controller => 'categories', :action => 'list'

# ex: http://localhost/product_group/electronics
map.search 'product_group/:search', :controller => 'products', :action => 'list'

Чтобы частично ответить на ваш вопрос, вы можете рассмотретьдобавление модели категории и связывание всех продуктов с категорией.затем вы можете добавить именованный маршрут для просмотра элементов по категориям, как в приведенном выше блоке кода.

Основным преимуществом использования именованных маршрутов является то, что вы можете вызывать их в своих представлениях как category_url или category_path,Большинство людей не хотят этого делать и полагаются на сопоставления маршрутов по умолчанию (в конце route.rb):

 # ex: http://localhost/category/view/1
 map.connect ':controller/:action/:id'

 # ex: http://localhost/category/view/1.xml
 # ex: http://localhost/category/view/1.json
 map.connect ':controller/:action/:id.:format'

Здесь важно упомянуть, что когда URI совпадает с маршрутомпараметр, соответствующий символу (: id или: search), передается в хэш params.Например, поиск по названному маршруту выше будет соответствовать поисковому запросу в params[:search], поэтому, если у ваших продуктов есть строковый столбец с именем 'type', по которому вы планируете искать, ваш контроллер продуктов может выглядеть так:

class Products < ApplicationController
  def list
    search_term = params[:search]
    @products = Product.find(:all, :conditions => ["type = ?", search_term])
  end
end

Тогда у представления [Project]/app/views/products/list.html.erb будет прямой доступ к @products

Если вы действительно хотите углубленное представление о Ruby on Rails (за которым, вероятно, будет следовать в 10 раз легче, чемруководство по ссылке, которую вы разместили) вы должны проверить
Agile Web Development с Rails: второе издание, второе издание

...