link_to action "mostrar" a otro controlador
Frecuentes
Visto 1,328 veces
0
- 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?
1 Respuestas
0
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 ruby-on-rails ruby-on-rails-3.1 link-to or haz tu propia pregunta.
no especifica cuál es el resultado previsto o cuál es el resultado actual. - danpickett
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. - maiconsanson