2016-07-15 9 views
0

Ich versuche seller_id auf meine Artikel Modell in einer Migration fügen die von folgenden Aktionen ausführen:Rails Migration t.belongs_to: Benutzer, benutzerdefinierte Spaltennamen seller_id hinzufügen?

rails g model Item title:string description:text price:bigint status:integer published_date:datetime seller:belongs_to

Dies ist natürlich nicht funktioniert ...

schließlich möchte ich seller_id sehen in Meine Artikeltabelle, die das Artikelmodell mit dem Benutzermodell in Beziehung setzt.

Derzeit meine Migration sieht wie folgt aus:

class CreateItems < ActiveRecord::Migration 
    def change 
    create_table :items do |t| 
     t.string :title 
     t.text :description 
     t.bigint :price 
     t.integer :status 
     t.datetime :published_date 
     t.belongs_to :user, index: true, foreign_key: true 
     t.timestamps null: false 
    end 
    end 
end 
  1. Wie kann ich diese Migration modifizieren, um einen Fremdschlüssel „seller_id“ zu erstellen, die dem Benutzer Modell bezieht.

  2. Wie kann ich automatisch eine Migration generieren, die Bearbeitungen von 1. enthält, von der Konsole? Ändern Sie die Schienen g Modell ... um die Migration zu generieren, die ich brauche.

Riesiger Dank!

Antwort

2

nur explizit definieren, was Sie in der Migrationsdatei wollen und die notwendige Beziehung zum Modell hinzufügen, statt t.belongs_to Sie nur verwenden:

t.integer :seller_id, index: true, foreign_key: true 

und in Ihren Modellen könnten Sie gehen über diese ein paar Möglichkeiten, Wenn Sie Ihre Beziehung als Verkäufer auf Artikel Instanzen wollen Referenz dann auch in der Item-Klasse machen die Beziehung:

belongs_to :seller, class_name: 'User' 

und in der Benutzerklasse:

has_many :items, foreign_key: :seller_id 

oder wenn Sie es verweisen möchten als Benutzer aus dem Artikel dann:

belongs_to :user, foreign_key: :seller_id 

in Bezug auf den Generator bearbeiten, das ist die Standardmethode, dass ein Modellgenerator arbeitet und meiner Meinung nach Ich mag die Vorgaben halten, wie sie sind. Ich empfehle jedoch, eigene Rails Generatoren oder eigene Rake Tasks zu erstellen, wenn Sie ein Custom/Special Case erstellen möchten. Für die Erstellung Ihrer eigenen Generator würde ich Sie auf die Ruby on Rails offiziellen Leitfaden für die Erstellung von Generatoren, um Sie zu starten: http://guides.rubyonrails.org/generators.html

+0

große Antwort, danke! – matthewalexander

0
  1. Wenn Sie nicht möchten, dass es speziell seller_id genannt wird, dann ist das, was Sie haben, genug. Sobald Sie Ihre Migration mit rake db:migrate laufen Sie die aktuelle Tabellenstruktur in Ihrer db/schema.rb Datei mit einem fremden siehe Schlüssel user_id
  2. Sie können einfach die erzeugte Migrationsdatei in Ihrem bevorzugten Texteditor bearbeiten, um die Migration zu bearbeiten, bevor rake db:migrate
laufen
+0

"Add benutzerdefinierte Spalte Name seller_id" ist speziell in der Frage. Dies ist eine Voraussetzung. – matthewalexander