3

我正在尝试开发具有以下目标的 Rails 应用程序:

/foods/- 呈现食物类别列表(例如:面包、乳制品、饼干...等)
/foods/breads/- 呈现食物类别“面包”内的所有食物 - 呈现食物
foods/breads/bagel属性的详细视图(在本例中为 Bagel )。

目前我有两个带有关联控制器的模型:

Foods- 包含食物列表(例如:百吉饼、米饭、吐司、浓茶饼干...等)并设置为belongs_to单个 Food Cat

Food Categories- 类别列表,如“乳制品”、“面包”...等 & 设置为has_many :foods

我真的很纠结如何实现我的目标。我真的需要关于路由、控制器操作和视图的建议。

有什么建议么?

4

2 回答 2

1

在您的 routes.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

然后我将在您的 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 个视图:类别/索引、食物/索引和食物/显示。

于 2011-02-19T19:08:44.977 回答
0

你应该有一个FoodsController和一个FoodCategoriesController来处理FoodFoodCategory模型。如果您遵循 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查找列出所有类别,以及show方法将根据提供的FoodCategory:category_id查找并通过 has_many 关系显示与其关联的所有食物。您的FoodController将有一个show方法,该方法至少会获取:food_id并查找与其关联的 Food 实例。:category_id 这里并不是真的需要,但它是一个很好的路由糖。

于 2011-02-19T18:58:51.163 回答