link_to action "mostrar" a otro controlador

  • rubí 1.9.2p290
  • rieles 3.1.1

Básicamente tengo dos modelos: CHEFS y RECETAS.

class Chef < ActiveRecord::Base 
 has_many :recipes
end

class Recipe < ActiveRecord::Base
 belongs_to :chef
end

Y las siguientes rutas:

resources :recipes

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

Con esto tengo las urls (exactamente lo que quiero):

  • /recetas - lista de recetas
  • /chefs/nombre de usuario/recetas - lista de recetas del chef
  • /chefs/ - lista de cocineros
  • /chefs/nombre de usuario - perfil del chef

Controlador de recetas:

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

Mis recetas índice ver:

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

In http://3001/chefs/username/recipes Tengo el enlace correcto al perfil del Chef.

Pero en http://3001/recipes Tengo el enlace equivocado.

¿Qué estoy haciendo mal?

preguntado el 09 de marzo de 12 a las 14:03

no especifica cuál es el resultado previsto o cuál es el resultado actual. -

Lo siento, tal vez no me expliqué correctamente (mi inglés no es tan bueno). Quiero el link_to a la acción show de Chef (/chefs/username) en la vista de índice del controlador de Receta. -

1 Respuestas

In http://3001/recipes (¡que es una URL rara!), no tienes acceso a params[:chef_id]. Por lo tanto, no tendrá la variable @chef disponible en la vista. Debería ser nil!

Para evitar esto, cambie su link_to a este

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

Es posible que desee cargar con entusiasmo el chef a su @recipes registros cargando eso en su controlador de esta manera:

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

Espero que esto ayude.

respondido 09 mar '12, 15:03

Fio, muchas gracias! funciona bien La ansiosa pista de carga también. ¡Soy nuevo en los rieles! ¿Por qué pensaste que esa URL es rara? - maiconsanson

Por lo general, es como 127.0.0.1:3001/recetas or localhost:3001/recetas etc. ¿Tal vez ha cambiado su archivo de host? - Gana Phyo Wai

Claro, tienes razón. Por alguna razón omití el localhost: - maiconsanson

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.