我有一个配方模型,带有has_many到关联(类别,分类)。
在主页上,我列出了所有类别,我想在每个类别上创建link_to
链接到包含属于该类别的所有食谱的页面。
最好的方法是什么?
我可以为配方控制器上的每个类别创建一个不同的操作,条件为Recipe.where(category: "something")
,但这也需要一个不同的视图。
有没有更好的方法(使用更好的RESTful方法)来实现这一目标?
感谢。
答案 0 :(得分:2)
使用嵌套资源:
resources :categories do
resources :recipes
end
这将产生/categories/:category_id/recipes
之类的路线,这将是食谱的index
动作,但在参数中有类别ID
此外,您可以使用slug作为类别而不是数字ID。
答案 1 :(得分:1)
"正确"这样做的方法是使用nested resources
为您提供一种方法来指定" parent"模型(在您的情况下为Category
):
#config/routes.rb
resources :categories do
resources :recipes, only :index
end
#app/controllers/recipes_controller.rb
class RecipesController < ApplicationController
def index
@category = Category.find params[:category_id] if params[:category_id]
@recipes = @category ? @category.recipes : Recipe.all
end
end
以上内容将允许您链接到以下内容:
#app/views/categories/index.html.erb
<% @categories.each do |category| %>
<%= link_to "Recipes", [category, :recipes] %>
<% end %>
这将使您使用以下内容填充recipes#index
操作:
#app/views/recipes/index.html.erb
<% @recipes.each do |recipe| %>
<%= recipe.title %>
<% end %>