link_to动作“显示”到另一个控制器

时间:2012-03-09 14:12:30

标签: ruby-on-rails ruby-on-rails-3.1 link-to

  • ruby​​ 1.9.2p290
  • rails 3.1.1

基本上我有两种型号:CHEFS和RECIPES。

class Chef < ActiveRecord::Base 
 has_many :recipes
end

class Recipe < ActiveRecord::Base
 belongs_to :chef
end

以下路线:

resources :recipes

resources :chefs do
 # list of recipes from chef
 resources :recipes, :to => 'recipes#index_chef'
end

有了这个,我有了网址(正是我想要的):

  • / recipes - 食谱列表
  • / chefs / username / recipes - 厨师食谱列表
  • / chefs / - 厨师名单
  • / chefs / username - chef&#c>

的RecipesController:

def index
 @chef = Chef.find_by_username(params[:chef_id])
 @recipes = Recipe.where({ :status_id => 1 }).order("id desc").page(params[:page]).per(9)
end

def index_chef
  @chef = Chef.find_by_username(params[:chef_id])
  @recipes = @chef.recipes.where(:status_id => 1).order("id desc").page(params[:page]).per(9)
end

我的食谱索引查看:

<%= link_to recipe.chef.username.capitalize, @chef %>

http://3001/chefs/username/recipes中,我有一个指向Chef个人资料的正确链接。

但在http://3001/recipes我的链接错误。

我做错了什么?

1 个答案:

答案 0 :(得分:0)

http://3001/recipes(这是一个奇怪的网址!)中,您无法访问params[:chef_id]。因此,您在视图中无法使用@chef变量。它应该是nil

要解决此问题,请将link_to更改为此

<%= link_to recipe.chef.username.capitalize, recipe.chef %>

您可能希望将主厨加载到您的@recipes记录,方法是将其加载到您的控制器中,如下所示:

 @recipes = Recipe.where({ :status_id => 1 }).includes(:chef).order("id desc").page(params[:page]).per(9)

希望这有帮助。