Domanda

Sto cercando di creare una relazione molti-a-molti tra i 2 oggetti. Ho passato con diversi tutorial e sono stati in grado di impostare correttamente il modello. Il mio problema è che io sto avendo l'impostazione dei percorsi corretti in modo da poter vedere il rapporto completo ... qualcosa di simile visualizzando solo i prodotti da una categoria specifica guai ( / categorie / 1 / prodotti / )

Ecco come ho generato il modello:

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

Ecco lo 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

Ecco gli oggetti 3 del modello:

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

Piuttosto semplice e tutto sembra funzionare bene perché posso aggiungere un prodotto a una categoria attraverso la console:

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

Sono sicuro che ho bisogno di aggiornare il file routes.rb ma io non so davvero il modo corretto di farlo. Questo è quello che ho messo nel file rotte:

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

Quando tento di visualizzare i prodotti su una categoria "/ categorie / 7 / prodotti /" solo elenca tutti i prodotti! Questo significa il mio percorso è corretta e ho solo bisogno di scrivere un'azione personalizzata sul controller prodotti (invece di farlo andare all'indice)? Che cosa sto facendo male qui ... io chiudo o lontano?!?

Grazie

È stato utile?

Soluzione

Siete probabilmente non utilizzando i dati del percorso per filtrare l'elenco dei prodotti.

Nel tuo metodo indice del product_controller, è necessario fare qualcosa di simile:

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

Altri suggerimenti

Che cosa si vuole fare è utilizzare le risorse nidificato. Il formato generale è simile al seguente:

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

Per saperne di più su di esso qui .

Come proposto in questa domanda , si potrebbe provare ad aggiungere il parametro di richiesta:. category_id alla tua richiesta find

Sempre guardare l'uscita di percorsi rastrello .

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top