Question

Je suis en train de mettre en place un grand nombre à plusieurs entre 2 objets. Je suis passé par plusieurs tutoriels et ont été en mesure de régler correctement le modèle. Mon problème est que je ne parviens pas à mettre en place les routes correctes, donc je peux voir la relation complète ... quelque chose comme n'affichant les produits d'une catégorie spécifique ( / catégories / 1 / products / )

Voici comment je le modèle généré:

script/generate scaffold category name:string
script/generate scaffold product name:string
script/generate scaffold categorization category_id:integer product_id:integer

Voici le schéma:

ActiveRecord::Schema.define(:version => 20100205210519) do

  create_table "categories", :force => true do |t|
    t.string   "name"
    t.datetime "created_at"
    t.datetime "updated_at"
  end

  create_table "categorizations", :force => true do |t|
    t.integer  "category_id"
    t.integer  "product_id"
    t.datetime "created_at"
    t.datetime "updated_at"
  end

  create_table "products", :force => true do |t|
    t.string   "name"
    t.datetime "created_at"
    t.datetime "updated_at"
  end
end

Voici les 3 objets du modèle:

class Category < ActiveRecord::Base
    has_many :categorizations
    has_many :products, :through => :categorizations
end

class Product < ActiveRecord::Base
    has_many :categorizations
    has_many :categories, :through => :categorizations
end

class Categorization < ActiveRecord::Base
    belongs_to :product
    belongs_to :category
end

Assez simple et tout semble fonctionner très bien parce que je peux ajouter un produit à une catégorie via la console:

@category.categorizations << Categorization.new(:product_id => 1)

Je suis sûr que je dois mettre à jour le fichier routes.rb mais je ne sais pas vraiment la bonne façon de le faire. Voilà ce que je mets dans le fichier de routes:

map.resources :categories, :has_many => :products

Lorsque je tente de voir les produits sur une catégorie « / catégories / 7 / produits / » il énumère simplement tous les produits! Est-ce que cela veut dire mon itinéraire est configuré correctement et j'ai juste besoin d'écrire une action personnalisée sur le contrôleur de produits (au lieu de passer à l'index)? Qu'est-ce que je fais mal ici ... suis-je fermer ou loin?!?

Merci

Était-ce utile?

La solution

Vous n'êtes probablement pas en utilisant les données de la route pour filtrer votre liste de produits.

Dans votre méthode d'index de la product_controller, vous devez faire quelque chose comme:

Category.find(params[:category_id]).products

Autres conseils

Qu'est-ce que vous voulez faire est d'utiliser les ressources imbriquées. Le format général ressemble à ceci:

map.resources :users do |users|
  users.resources :posts
end

En savoir plus sur ce .

Comme proposé dans cette question , vous pouvez essayer d'ajouter le paramètre de demande:. category_id à votre requête find

Toujours regarder la sortie des itinéraires râteau .

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top