Frage

Ich versuche, eine Many-to-Many Verbindung zwischen zwei Objekten einzurichten. Ich habe durch einige Tutorials gegangen und konnte richtig das Modell einzurichten. Mein Problem ist, dass ich Probleme habe, die richtigen Routen einrichten, damit ich die volle Beziehung sehen ... so etwas wie nur die Produkte aus einer bestimmten Kategorie angezeigt wird ( / categories / 1 / products / )

Dies ist, wie ich das Modell generiert:

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

Hier ist das Schema:

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

Hier ist die 3 Modellobjekte:

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

Ganz einfach und alles scheint in Ordnung zu arbeiten, weil ich einen Artikel in eine Kategorie über die Konsole hinzufügen:

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

Ich bin sicher, ich brauche die routes.rb Datei zu aktualisieren, aber ich weiß nicht wirklich den richtigen Weg, es zu tun. Dies ist, was ich in der Routen-Datei setzen:

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

Wenn ich versuche, Produkte auf eine Kategorie, um „/ categories / 7 / products /“ es nur alle Produkte aufgeführt! Bedeutet dies, mein Weg richtig eingestellt ist und ich brauche nur eine benutzerdefinierte Aktion auf die Produkte Controller zu schreiben (statt es zu indizieren gehen)? Was mache ich falsch hier tun ... Ich bin in der Nähe oder weg?!?

Danke

War es hilfreich?

Lösung

Sie sind wahrscheinlich nicht die Daten von der Strecke mit der Liste der Produkte zu filtern.

In Ihrer Index-Methode des product_controller, müssen Sie etwas tun, wie:

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

Andere Tipps

Was Sie tun möchten, ist die Verwendung verschachtelt Ressourcen. Das allgemeine Format sieht wie folgt aus:

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

Lesen Sie mehr dazu hier .

Wie in , könnten Sie versuchen, die Anfrage Parameter hinzufügen:. category_id auf Ihre Entdeckung Abfrage

Schauen Sie immer am Ausgang der Rake Routen .

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top