Rail Application Model / Организация контроллеров и маршрутизации - PullRequest
3 голосов
/ 19 февраля 2011

Я пытаюсь работать над этим приложением Rails, которое преследует следующие цели:

/foods/ - отобразить список категорий продуктов питания (например, хлеб, молочные продукты, печенье и т. Д.)
/foods/breads/ - отображать все продукты, относящиеся к категории продуктов "Хлеб"
foods/breads/bagel - подробный просмотр свойств Пищи (в нашем примере это Бублик).

В настоящее время у меня есть две модели с соответствующими контроллерами:

Foods - содержит список продуктов (например: бублик, рис, тосты, печенье с богатым чаем и т. Д.) И настроен на belongs_to один корм для кошек

Food Categories - список категорий, таких как "Молочные продукты", "Хлеб" ... и т. Д., И настроен на has_many :foods

Я действительно застрял в том, как достичь своих целей. Мне действительно нужен совет по маршрутизации, действиям контроллера и представлениям.

Есть предложения?

Ответы [ 2 ]

1 голос
/ 19 февраля 2011

В вашем файле rout.rb я бы сделал следующее:

match 'foods' => 'FoodCategories#index'
match 'foods/:category' => 'Foods#index'
match 'foods/:category/:name' => 'Foods#show'

Я бы тогда создал область для Foods по категории:

class Food
  scope :by_category, lambda{ |category| joins(:categories).where('categories.name = ?', category) }
end

У меня было бы 2действия в вашем FoodsController:

class FoodsController
  def index
    @foods = Food.by_category(params[:category])
  end

  def show
    @foods = Food.by_category(params[:category]).where('foods.name = ?', params[:name])
  end
end

И единственное действие в вашем FoodCategoriesController:

class FoodCategories
  def index
    @categories = Category.where(name: params[:category])
  end
end

Это должно оставить вам необходимость реализовать 3 представления: категории / индекс, продукты / индекс ипродукты / шоу.

0 голосов
/ 19 февраля 2011

У вас должны быть FoodsController и FoodCategoriesController , работающие с Food и FoodCategory моделями.если вы будете следовать подходу RESTful, маршруты, необходимые для достижения указанной вами конфигурации URL, будут следующими:

match '/foods' => 'food_categories#index'
match '/foods/:category_id' => 'food_categories#show'
match '/foods/:category_id/:food_id' => 'foods#show'

Ваш FoodCategoriesController будет иметь методы index метод, который перечисляет все категории, выполняя FoodCategory.find: all lookup, а также show метод, который будет искать FoodCategory на основе предоставленных :category_id иотобразить все продукты, связанные с ним через отношение has_many.Ваш FoodController будет иметь метод show , который по крайней мере возьмет :food_id и найдет экземпляр Food, связанный с ним.:category_id здесь на самом деле не нужно, но это хороший сахар для маршрутизации.

...