link_to相同的动作,不同的条件

时间:2016-01-26 21:09:06

标签: ruby-on-rails has-many-through

我有一个配方模型,带有has_many到关联(类别,分类)。

在主页上,我列出了所有类别,我想在每个类别上创建link_to链接到包含属于该类别的所有食谱的页面。

最好的方法是什么?

我可以为配方控制器上的每个类别创建一个不同的操作,条件为Recipe.where(category: "something"),但这也需要一个不同的视图。

有没有更好的方法(使用更好的RESTful方法)来实现这一目标?

感谢。

2 个答案:

答案 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 %>