我正在努力研究这个有以下目标的Rails应用程序:
/foods/
- 呈现食物类别列表(例如:面包,奶制品,饼干等)
/foods/breads/
- 渲染食品类别“面包”中的所有食品
foods/breads/bagel
- 渲染食物属性的详细视图(在本例中为百吉饼)。
目前我有两个带相关控制器的型号:
Foods
- 包含食物清单(例如:百吉饼,米饭,吐司,浓茶饼干等),并设置为belongs_to
一只食物猫
Food Categories
- 一系列类别,例如“Dairy”,“Breads”等等&设置为has_many :foods
我真的被困在如何实现我的目标上。我真的需要有关路由,控制器操作和视图的建议。
有什么建议吗?
答案 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
在这里并不是必需的,但它是一个很好的路由糖。