2012-10-29 8 views
11

Teraz robię projekt ruby ​​na szynach. Stworzyłem encję o nazwie product i chcę ustawić wiele do wielu relacji z innymi encji o nazwie category.Ustawianie odniesień do tabeli poprzez rusztowanie w rubyonrails

script/generate scaffold product prd_name:string category:references 

Robiąc ten kod tylko jeden do jednego mapowania jest possible.How mogę ustawić wiele do wielu bez twarde kodowania?

Odpowiedz

0

Nie możemy tego zrobić przez rusztowanie. Musimy edytować model klasy, aby ustawić wiele do wielu relacji.

+5

To nie jest prawda (więcej), patrz odpowiedź Rui Castro. – slhck

15

Nie należy oczekiwać, że aplikacja będzie generowana samodzielnie przez rusztowanie. Ma służyć jedynie jako przykład do rozpoczęcia pracy.

Najbardziej elastyczny rodzaj relacji wiele do wielu w szynach nazywa się has many through. Wymaga to tabeli łączenia, która w tym przypadku jest zwykle nazywana "kategoryzacją". Wymagałoby to kolumny product_id zadeklarowanej jako belongs to :product i kolumny category_id zadeklarowanej jako belongs_to :category. Te trzy modele (w tym modelu join) zostanie ogłoszony w następujący sposób:

# 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 

Zauważ, że ja o nazwie kolumny name zamiast prd_name ponieważ jest zarówno czytelny dla człowieka i unika redundantny powtórzenia nazwy tabeli. Jest to szczególnie zalecane podczas korzystania z szyn.

Modele mogą być generowane w ten sposób:

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

Jak do generowania rusztowania, można zastąpić model z scaffold w pierwszych dwóch poleceń. Znowu jednak nie polecam tego, z wyjątkiem sposobu, aby zobaczyć przykład, z którego można się uczyć.

+0

a co z plikiem migracji? – Niths

+0

Zobacz zaktualizowaną odpowiedź. – noodl

3

Jest to teraz możliwe, aby wygenerować rusztowanie z referencjami z poleceniem tej

$ rails generate scaffold Comment commenter:string body:text post:references 
Powiązane problemy