Ruby on Rails menghasilkan bidang model: tipe - apa saja opsi untuk bidang: tipe?

308

Saya mencoba membuat model baru dan lupa sintaksis untuk mereferensikan ID model lain. Saya akan mencarinya sendiri, tetapi saya belum menemukan, di antara semua tautan dokumentasi Ruby on Rails saya, bagaimana menemukan sumber yang pasti.

$ rails g model Item name:string description:text(dan di sini reference:productatau references:product). Tetapi pertanyaan yang lebih baik adalah di mana atau bagaimana saya bisa mencari kekonyolan semacam ini dengan mudah di masa depan?

Catatan: Saya telah belajar dengan cara yang sulit bahwa jika saya salah ketik opsi ini dan menjalankan migrasi saya maka Ruby on Rails akan benar-benar mengacaukan basis data saya ... dan rake db:rollbacktidak berdaya melawan kekacauan semacam itu. Saya yakin saya tidak mengerti sesuatu, tetapi sampai saya melakukan ... informasi "terperinci" yang dikembalikan oleh rails g modelmasih membuat saya menggaruk ...

Meltemi
sumber
Bagaimana dengan: opsi uniq dan: bidang indeks? Seperti pada "rails g body title model: text tracking_id: integer: uniq". Saya tidak dapat menemukan dokumentasi untuk itu. Apakah masih ada lagi?
Kangur
11
rails generate model --help
Dennis
1
Menggunakan kontrol versi akan memberi Anda cara mudah untuk mengembalikan file apa pun yang dihasilkan. Dan jika masalahnya ada di database ... yah, Anda selalu bisa melakukan db: schema: load
Hector Ordonez
1
baik itu telah dilihat lebih dari 140 ribu kali dan 243 orang pada hari ini menemukan itu berguna jadi itu bukan pertanyaan konyol dengan cara apa pun :)
BKSpurgeon

Jawaban:

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

Lihat bagian definisi tabel .

Paul Schreiber
sumber
13
hmm ... tidak disebutkan :referenceatau :referencesdalam jawaban Anda atau penjelasan tentang cara meneruskannya ke generator di tautan yang Anda berikan?!?
Meltemi
53
Itu sama sekali tidak menjawab pertanyaan.
MikeEL
1
Memilih ini sebagai jawaban tetapi ketahuilah bahwa : referensi juga merupakan pilihan.
Meltemi
14
Apakah ada beberapa dokumentasi yang benar-benar mendefinisikan tipe kolom ini? Misalnya, bagaimana stringberbeda dari text?
Grant Birchmeier
3
@ Kangur uniqdan indexsufiks (dan semua tipe) didokumentasikan dalam penggunaan rails generate model. Jalankan rails g modeluntuk melihat dokumen penggunaan.
Dennis
188

Untuk membuat model yang mereferensikan yang lain, gunakan generator model Ruby on Rails:

$ rails g model wheel car:references

Yang menghasilkan aplikasi / model / wheel.rb :

class Wheel < ActiveRecord::Base
  belongs_to :car
end

Dan menambahkan migrasi berikut:

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

Ketika Anda menjalankan migrasi, yang berikut ini akan berakhir di db / schema.rb Anda :

$ rake db:migrate

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

Adapun dokumentasi, titik awal untuk generator kereta api adalah Ruby on Rails: Panduan untuk The Command Rails Line yang mengarahkan Anda ke Dokumentasi API untuk lebih lanjut tentang jenis bidang yang tersedia.

Troy
sumber
4
sedikit dari tanggal dengan komentar, tapi ini adalah yang jawaban untuk pertanyaan ini. +1
omninonsense
7

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

Saya juga menemukan panduan sulit digunakan. Mudah dimengerti, tetapi sulit menemukan apa yang saya cari.

Juga, saya memiliki proyek temp yang menjalankan rails generateperintah. Kemudian begitu saya membuat mereka bekerja saya menjalankannya di proyek saya yang sebenarnya.

Referensi untuk kode di atas: http://guides.rubyonrails.org/getting_started.html#associating-models

B Tujuh
sumber
3

Jangan lupa kapitalisasi teks Anda saat menulis perintah ini. Sebagai contoh:

Apakah menulis:

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

Jangan menulis:

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

Setidaknya itu masalah bagiku.

Victor Augusto
sumber
Tunggu?!? Apa? Saya menggunakan nama model saya setiap saat! "Masalah" apa yang Anda lihat?
Meltemi
2
Saya tidak berbicara tentang nama model Anda, tetapi nama 'Model'. Saya mencoba membuat model seperti ini: rails g Judul produk Model: string dan mendapat: Tidak dapat menemukan Model generator. jadi saya mencobanya seperti ini: rails g model judul produk: string dan berhasil.
Victor Augusto
1
Ah. Belum menemukan b4 itu. Tip yang bagus!
Meltemi
2
(Bukan nama model yang menjadi masalah, itu kata yang modelmerujuk pada generator rails g model Product ….).
Asherah
0

Sangat sederhana dalam ROR untuk membuat model yang mereferensikan yang lain.

rails g model Nama item: deskripsi string: produk teks: referensi

Kode ini akan menambahkan kolom 'product_id' di tabel Item

Chandanjha
sumber
0

Ada banyak tipe data yang dapat Anda sebutkan saat membuat model, beberapa contoh adalah:

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

sintaksis:

field_type:data_type
Chandanjha
sumber
0

Saya memiliki masalah yang sama, tetapi kode saya sedikit berbeda.

def new
 @project = Project.new
end

Dan formulir saya terlihat seperti ini:

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

Itu sepenuhnya benar, jadi saya tidak tahu bagaimana cara mengetahuinya.

Akhirnya, tambahkan saja

url: { projects: :create }

setelah

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

bekerja untukku.

justinedps26
sumber
Ini mungkin jawaban yang baik tapi aku tidak yakin bagaimana hal ini berkaitan dengan OP yang sekitar jenis bidang ( :integer, :string, dll ...).
Meltemi