действие link_to "показать" другому контроллеру - PullRequest
0 голосов
/ 09 марта 2012
  • ruby ​​1.9.2p290
  • рельсы 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

При этом у меня есть URL-адреса (именно то, что я хочу):

  • / recipes - список рецептов
  • / chefs / имя пользователя / рецепты - список рецептов шеф-повара
  • / chefs / - список поваров
  • / chefs / username - профиль шеф-повара

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

Мои рецепты index просмотр:

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

В http://3001/chefs/username/recipes У меня есть правильная ссылка на профиль Chef.

Но в http://3001/recipes У меня неправильная ссылка.

Что я делаю не так

1 Ответ

0 голосов
/ 09 марта 2012

В http://3001/recipes (странный URL!) У вас нет доступа к 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)

Надеюсь, это поможет.

...