铁路应用模型/控制器;路线组织

时间:2011-02-19 18:11:38

标签: ruby-on-rails ruby-on-rails-3 controllers

我正在努力研究这个有以下目标的Rails应用程序:

/foods/ - 呈现食物类别列表(例如:面包,奶制品,饼干等)
/foods/breads/ - 渲染食品类别“面包”中的所有食品 foods/breads/bagel - 渲染食物属性的详细视图(在本例中为百吉饼)。

目前我有两个带相关控制器的型号:

Foods - 包含食物清单(例如:百吉饼,米饭,吐司,浓茶饼干等),并设置为belongs_to一只食物猫

Food Categories - 一系列类别,例如“Dairy”,“Breads”等等&设置为has_many :foods

我真的被困在如何实现我的目标上。我真的需要有关路由,控制器操作和视图的建议。

有什么建议吗?

2 个答案:

答案 0 :(得分:1)

在routes.rb文件中,我会执行以下操作:

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

然后我会按类别为食物创建一个范围:

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

然后我会在你的FoodsController中有2个动作:

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种观点:类别/指数,食物/指数和食物/节目。

答案 1 :(得分:0)

您应该有 FoodsController FoodCategoriesController 处理 Food FoodCategory 模型。 如果您遵循RESTful方法,那么实现您列出的网址配置所需的路由将如下所示:

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

您的 FoodCategoriesController 将有方法索引方法,该方法通过执行 FoodCategory.find:all 查找以及 show 方法,它将根据提供的:category_id查找 FoodCategory ,并通过has_many关系显示与之关联的所有食物。 您的 FoodController 将有一个 show 方法,该方法至少会使用:food_id并查找与之关联的Food实例。 :category_id在这里并不是必需的,但它是一个很好的路由糖。