Ruby on Rails generiert Modellfeld: Typ - Welche Optionen gibt es für Feld: Typ?

308

Ich versuche, ein neues Modell zu generieren und die Syntax für die Referenzierung der ID eines anderen Modells zu vergessen. Ich würde es selbst nachschlagen, aber ich habe unter all meinen Ruby on Rails-Dokumentationslinks nicht herausgefunden, wie ich die endgültige Quelle finden kann.

$ rails g model Item name:string description:text(und hier entweder reference:productoder references:product). Aber die bessere Frage ist, wo oder wie ich in Zukunft leicht nach dieser Art von Albernheit suchen kann.

Hinweis: Ich habe auf die harte Tour gelernt, dass Ruby on Rails meine Datenbank völlig durcheinander bringt, wenn ich eine dieser Optionen falsch eingebe und meine Migration ausführe ... und rake db:rollbackgegen solche Fehler machtlos ist. Ich bin mir sicher, dass ich etwas einfach nicht verstehe, aber bis ich es tue ... die "detaillierten" Informationen, die von zurückgegeben werden, rails g modellassen mich immer noch kratzen ...

Meltemi
quelle
Was ist mit den Optionen: uniq und: index field? Wie in "Rails g Modell Titel Körper: Text Tracking_id: Integer: Uniq". Ich konnte keine Dokumentation dafür finden. Gibt es noch mehr
Kangur
11
rails generate model --help
Dennis
1
Die Verwendung einer Versionskontrolle bietet Ihnen eine einfache Möglichkeit, generierte Dateien zurückzusetzen. Und wenn das Problem in der Datenbank liegt ... nun, Sie können immer db: schema: load
Hector Ordonez
1
Nun, es wurde über 140.000 Mal gesehen und 243 Leute fanden es bis heute nützlich, also ist es keineswegs eine dumme Frage :)
BKSpurgeon

Antworten:

475
:primary_key, :string, :text, :integer, :float, :decimal, :datetime, :timestamp,
:time, :date, :binary, :boolean, :references

Siehe den Abschnitt mit den Tabellendefinitionen .

Paul Schreiber
quelle
13
hmm ... keine Erwähnung :referenceoder :referencesin Ihrer Antwort oder eine Erklärung, wie Sie sie in dem von Ihnen angegebenen Link an Generatoren weitergeben können?!?
Meltemi
53
Das beantwortet die Frage überhaupt nicht.
MikeEL
1
Wählte dies als Antwort, aber wissen Sie, dass : Referenzen auch eine Option ist.
Meltemi
14
Gibt es eine Dokumentation, die diese Spaltentypen tatsächlich definiert ? Wie unterscheidet stringsich zum Beispiel von text?
Grant Birchmeier
3
@Kangur die uniqund indexSuffixe (und alle Typen) sind in der Verwendung von dokumentiert rails generate model. Führen Sie diese aus rails g model, um die Verwendungsdokumente anzuzeigen.
Dennis
188

Verwenden Sie den Ruby on Rails-Modellgenerator, um ein Modell zu erstellen, das auf ein anderes Modell verweist:

$ rails g model wheel car:references

Das erzeugt App / Models / Wheel.rb :

class Wheel < ActiveRecord::Base
  belongs_to :car
end

Und fügt die folgende Migration hinzu:

class CreateWheels < ActiveRecord::Migration
  def self.up
    create_table :wheels do |t|
      t.references :car

      t.timestamps
    end
  end

  def self.down
    drop_table :wheels
  end
end

Wenn Sie die Migration ausführen, wird Folgendes in Ihrer Datenbank / schema.rb angezeigt :

$ rake db:migrate

create_table "wheels", :force => true do |t|
  t.integer  "car_id"
  t.datetime "created_at"
  t.datetime "updated_at"
end

Ein Ausgangspunkt für Rails-Generatoren ist Ruby on Rails: Ein Leitfaden zur Rails-Befehlszeile, der Sie auf die API-Dokumentation verweist, um weitere Informationen zu verfügbaren Feldtypen zu erhalten.

Troy
quelle
4
etwas veraltet mit dem Kommentar, aber dies ist die Antwort auf diese Frage. +1
Omninonsense
7

$ rails g model Item name:string description:text product:references

Auch ich fand die Anleitungen schwierig zu bedienen. Leicht zu verstehen, aber schwer zu finden, wonach ich suche.

Außerdem habe ich temporäre Projekte, die ich ausführe rails generate Befehle ausführe. Sobald ich sie zum Laufen gebracht habe, führe ich sie für mein reales Projekt aus.

Referenz für den obigen Code: http://guides.rubyonrails.org/getting_started.html#associating-models

B Sieben
quelle
3

Denken Sie daran, Ihren Text beim Schreiben dieses Befehls nicht groß zu schreiben. Zum Beispiel:

Schreiben Sie:

rails g model product title:string description:text image_url:string price:decimal

Schreibe nicht:

rails g Model product title:string description:text image_url:string price:decimal

Zumindest war es ein Problem für mich.

Victor Augusto
quelle
Warten?!? Was? Ich schreibe ständig meine Modellnamen groß! Welche "Probleme" sehen Sie?
Meltemi
2
Ich spreche nicht über den Namen Ihres Modells, sondern über den Namen 'Modell'. Ich habe versucht, ein Modell wie das folgende zu erstellen: Rails g Modell Produkttitel: Zeichenfolge und bekam: Generatormodell konnte nicht gefunden werden. Also habe ich es so versucht: Rails g Modell Produkttitel: String und es hat funktioniert.
Victor Augusto
1
Ah. Hatte das b4 nicht angetroffen. Guter Tipp!
Meltemi
2
(Es ist nicht der Modellname, der das Problem ist, es ist das Wort, modeldas sich auf den Generator bezieht rails g model Product ….
Ist in
0

In ROR ist es sehr einfach, ein Modell zu erstellen, das auf andere verweist.

Schienen g Modell Artikelname: Zeichenfolge Beschreibung: Text Produkt: Referenzen

Dieser Code fügt die Spalte 'product_id' in die Item-Tabelle ein

chandanjha
quelle
0

Es gibt viele Datentypen, die Sie beim Erstellen eines Modells erwähnen können. Einige Beispiele sind:

:primary_key, :string, :text, :integer, :float, :decimal, :datetime, :timestamp, :time, :date, :binary, :boolean, :references

Syntax:

field_type:data_type
chandanjha
quelle
0

Ich hatte das gleiche Problem, aber mein Code war etwas anders.

def new
 @project = Project.new
end

Und meine Form sah so aus:

<%= form_for @project do |f| %>
     and so on....
<% end %>

Das war völlig richtig, also wusste ich nicht, wie ich es herausfinden sollte.

Zum Schluss noch etwas hinzufügen

url: { projects: :create }

nach

<%= form-for @project ...%>

arbeitete für mich.

justinedps26
quelle
Dies kann eine gute Antwort sein , aber ich bin mir nicht sicher , wie es zum OP bezieht , die über Feldtypen sind ( :integer, :string, etc ...).
Meltemi