Ruby on Rails generuje pole model: typ - jakie są opcje dla pola: typ?

308

Próbuję wygenerować nowy model i zapomnieć o składni odwoływania się do identyfikatora innego modelu. Sam bym to sprawdził, ale nie znalazłem wśród wszystkich moich linków dokumentacji Ruby on Rails, jak znaleźć ostateczne źródło.

$ rails g model Item name:string description:text(i tu albo reference:productalbo references:product). Ale lepszym pytaniem jest, gdzie i jak mogę łatwo szukać tego rodzaju głupoty w przyszłości?

Uwaga: nauczyłem się na własnej skórze, że jeśli błędnie wpisuję jedną z tych opcji i uruchomię migrację, Ruby on Rails całkowicie spieprzy moją bazę danych ... i rake db:rollbacknie będzie w stanie poradzić sobie z takimi awariami. Jestem pewien, że po prostu czegoś nie rozumiem, ale dopóki tego nie zrobię ... „szczegółowe” informacje zwrócone przez rails g modelwciąż sprawiają, że drapię się…

Meltemi
źródło
Co z opcjami: uniq i: index field? Jak w „rails g model title body: text id_sledzenia: liczba całkowita: uniq”. Nie mogłem znaleźć dokumentacji dla nich. Czy jest coś jeszcze?
Kangur
11
rails generate model --help
Dennis
1
Użycie kontroli wersji zapewniłoby łatwy sposób przywrócenia wszystkich wygenerowanych plików. A jeśli problem dotyczy bazy danych ... cóż, zawsze możesz wykonać db: schema: load
Hector Ordonez
1
no cóż, widziano to ponad 140 tysięcy razy, a 243 osoby na dziś uznały to za przydatne, więc w żadnym razie nie jest to głupie pytanie :)
BKSpurgeon

Odpowiedzi:

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

Zobacz sekcję definicji tabeli .

Paul Schreiber
źródło
13
hmm ... brak wzmianki :referencelub :referencesodpowiedzi lub wyjaśnienia, w jaki sposób przekazać ją generatorom w podanym przez ciebie linku?!?
Meltemi,
53
To wcale nie odpowiada na pytanie.
MikeEL
1
Wybrałem to jako odpowiedź, ale wiedz, że : referencje to także opcja.
Meltemi
14
Czy istnieje dokumentacja, która faktycznie definiuje te typy kolumn? Na przykład czym się stringróżni text?
Grant Birchmeier,
3
@Kangur uniqi indexsufiksy (i wszystkie typy) są udokumentowane w użyciu rails generate model. Uruchom, rails g modelaby zobaczyć dokumenty użytkowania.
Dennis
188

Aby utworzyć model, który odwołuje się do innego, użyj generatora modeli Ruby on Rails:

$ rails g model wheel car:references

To produkuje app / models / wheel.rb :

class Wheel < ActiveRecord::Base
  belongs_to :car
end

I dodaje następującą migrację:

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

Po uruchomieniu migracji w pliku db / schema.rb wylądują następujące elementy :

$ rake db:migrate

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

Jeśli chodzi o dokumentację, punktem wyjścia dla generatorów szyn jest Ruby on Rails: przewodnik po linii poleceń Rails, który prowadzi do dokumentacji API, aby uzyskać więcej informacji o dostępnych typach pól.

Troja
źródło
4
nieco nieaktualne z komentarzem, ale to odpowiedź na to pytanie. +1
omninonsense
7

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

Ja również uważałem, że przewodniki są trudne w użyciu. Łatwy do zrozumienia, ale trudno znaleźć to, czego szukam.

Ponadto mam projekty tymczasowe, na których uruchamiam rails generatepolecenia. Potem, kiedy już je uruchomię, uruchamiam je przy moim prawdziwym projekcie.

Odniesienie do powyższego kodu: http://guides.rubyonrails.org/getting_started.html#associating-models

B Seven
źródło
3

Pamiętaj, aby nie pisać wielkich liter podczas pisania tego polecenia. Na przykład:

Pisz:

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

Nie pisz:

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

Przynajmniej był to dla mnie problem.

Victor Augusto
źródło
Czekać?!? Co? Cały czas używam wielkich liter! Jakie widzisz „problemy”?
Meltemi
2
Nie mówię o nazwie twojego modelu, ale o nazwie „Model”. Próbowałem stworzyć taki model: rails g Tytuł produktu Model: string i otrzymałem: Nie można znaleźć generatora Model. więc próbowałem tak: rails g model tytuł produktu: string i działało.
Victor Augusto,
1
Ach Nie spotkałem tego b4. Dobra wskazówka!
Meltemi
2
(Problemem nie jest nazwa modelu, to słowo modelodnoszące się do generatora. rails g model Product …Jest w porządku.)
Asherah
0

W ROR bardzo łatwo jest stworzyć model, który odwołuje się do innych.

szyny g model Nazwa przedmiotu: opis ciągu: tekstowy produkt: referencje

Ten kod doda kolumnę „product_id” do tabeli pozycji

chandanjha
źródło
0

Istnieje wiele typów danych, o których można wspomnieć podczas tworzenia modelu, niektóre przykłady to:

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

składnia:

field_type:data_type
chandanjha
źródło
0

Miałem ten sam problem, ale mój kod był trochę inny.

def new
 @project = Project.new
end

A moja postać wyglądała tak:

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

To było całkowicie poprawne, więc nie wiedziałem, jak to rozgryźć.

Wreszcie, po prostu dodając

url: { projects: :create }

po

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

pracował dla mnie.

justinedps26
źródło
To może być dobra odpowiedź, ale nie jestem pewien, jak odnosi się do PO, która jest o typach polowych ( :integer, :string, etc ...).
Meltemi