2012-10-29 8 views
11

Ora sto facendo un progetto su ruby ​​on rails. Ho creato un'entità denominata prodotto e desidero impostare una relazione molti a molti con l'altra entità denominata categoria.Impostazione dei riferimenti a una tabella tramite scaffolding in rubyonrails

script/generate scaffold product prd_name:string category:references 

Facendo questo codice solo mappatura uno a uno è possible.How posso impostare molti a molti senza disco di codifica?

risposta

0

Non possiamo farlo attraverso le impalcature. Dobbiamo modificare il modello della classe per impostare relazioni molti a molti.

+5

Questo non è vero (più), vedere la risposta di Rui Castro. – slhck

15

Non dovresti essere in grado di generare la tua app tramite il ponteggio da solo. Serve solo a fornire un esempio per iniziare.

Il tipo più flessibile di relazione molti-a-molti nei binari è chiamato has many through. Ciò richiede una tabella di join che in genere si chiamerebbe "categorizzazione" in questo caso. Sarebbe necessaria una colonna product_id dichiarata come belongs to :product e una colonna category_id dichiarata come belongs_to :category. I tre modelli (tra cui il modello di join) sarebbero dichiarati così:

# Table name: products 
# Columns: 
# name:string 

class Product < ActiveRecord::Base 
    has_many :categorisations 
    has_many :categories, through: :categorisations 
end 

# Table name: categories 
# Columns: 
# name:string 

class Category < ActiveRecord::Base 
    has_many :categorisations 
    has_many :products, through: :categorisations 
end 

# Table name: categorisations 
# Columns: 
# product_id:integer 
# category_id:integer 

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

Nota che ho chiamato le colonne name piuttosto che prd_name dal momento che questo è sia leggibile ed evita la ripetizione ridondante del nome della tabella. Questo è altamente raccomandato quando si usano le rotaie.

I modelli possono essere generati in questo modo:

rails generate model product name 
rails generate model category name 
rails generate model categorisation product:references category:references 

quanto riguarda la generazione del ponteggio, è possibile sostituire con modelscaffold nei primi due comandi. Ancora una volta, io non lo consiglio, tranne come un modo per vedere un esempio da cui imparare.

+0

che dire del file di migrazione? – Niths

+0

Vedi risposta aggiornata. – noodl

3

E' ora possibile generare un'impalcatura di riferimenti con un comando come questo

$ rails generate scaffold Comment commenter:string body:text post:references 
Problemi correlati