Ruby on Rails model alanı oluşturur: type - alan: type için seçenekler nelerdir?


308

Yeni bir model oluşturmaya ve başka bir modelin kimliğine başvurmak için sözdizimini unutmaya çalışıyorum. Kendime bakardım, ama tüm Ruby on Rails dokümantasyon linklerim arasında kesin kaynağı nasıl bulacağımı anlayamadım.

$ rails g model Item name:string description:text(ve burada ya reference:productda references:product). Ancak daha iyi soru, gelecekte bu tür bir aptallığı nerede veya nasıl arayabilirim?

Not: Bu seçeneklerden birini yanlış yazıp göçümü çalıştırırsam Ruby on Rails veritabanımı tamamen vidalayacak ve rake db:rollbackbu tür vidalara karşı güçsüz olacaklarını öğrendim. Eminim sadece bir şey anlamadım, ama anlayana kadar ... tarafından döndürülen "ayrıntılı" bilgiler rails g modelhala beni çiziyor


Peki: uniq ve: index alanı seçenekleri? "Rails g model title body: text tracking_id: integer: uniq" gibi. Bunlar için belge bulamadım. Artık var mı?
Kangur

11
rails generate model --help
Dennis

1
Bir sürüm kontrolü kullanmak, oluşturulan dosyaları geri almanın kolay bir yolunu sağlayacaktır. Ve sorun veritabanında ise ... iyi, her zaman db: şema yapabilirsiniz: yük
Hector Ordonez

1
iyi 140k kez görüldü ve bugün itibariyle 243 kişi yararlı buldu, bu yüzden aptalca bir soru değil :)
BKSpurgeon

Yanıtlar:


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

Bkz tablo tanımları bölümü.


13
hmm ... hiç söz :referenceya :referencesda cevap veya nasıl bir açıklama verdiğiniz linkte jeneratörlere geçmek?!?
Meltemi

53
Bu soruya hiç cevap vermiyor.
MikeEL

1
Bunu cevap olarak seçti, ancak şunu bilin : referanslar da bir seçenektir.
Meltemi

14
Bu sütun türlerini gerçekten tanımlayan bazı belgeler var mı ? Örneğin, stringarasındaki fark textnedir?
Grant Birchmeier

3
@Kangur uniqve indexson ekleri (ve tüm türleri) kullanımında belgelenmiştir rails generate model. rails g modelKullanım belgelerini görmek için çalıştırın .
Dennis

188

Bir başkasına referans veren bir model oluşturmak için Ruby on Rails model üretecini kullanın:

$ rails g model wheel car:references

Bu app / models / wheel.rb üretir :

class Wheel < ActiveRecord::Base
  belongs_to :car
end

Ve aşağıdaki geçişi ekler:

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

Geçişi çalıştırdığınızda, db / schema.rb dosyasında aşağıdakiler bulunur :

$ rake db:migrate

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

Belgelere gelince, ray üreteçleri için bir başlangıç ​​noktası Ruby on Rails: Kullanılabilir alan türleri hakkında daha fazla bilgi için API Belgelerine yönlendiren Rails Komut Satırı Kılavuzu .


4
biraz yorum ile güncel, ama bu bu soru için cevap. +1
omninonsense

7

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

Ben de kılavuzları kullanmak zor buldum. Anlaması kolay, ama aradığımı bulmak zor.

Ayrıca, rails generatekomutları çalıştırdığım geçici projelerim var . Sonra onları çalıştırdıktan sonra gerçek projemde çalıştırıyorum.

Yukarıdaki kod için referans: http://guides.rubyonrails.org/getting_started.html#associating-models


3

Bu komutu yazarken metninizi büyük yazmamayı unutmayın. Örneğin:

Yaz:

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

Yazma:

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

En azından benim için bir sorundu.


Bekle?!? Ne? Model isimlerimi her zaman büyük harfle yazıyorum! Hangi "sorunları" görüyorsunuz?
Meltemi

2
Modelinizin adından değil, 'Model' adından bahsediyorum. Ben böyle bir model oluşturmaya çalıştım: raylar g Model ürün başlığı: string ve got: Jeneratör Modeli bulunamadı. bu yüzden böyle denedim: raylar g modeli ürün başlığı: string ve çalıştı.
Victor Augusto

1
Ah. Bu b4 ile karşılaşmamıştı. İyi bahşiş!
Meltemi

2
(Mesele model adı değil, modeljeneratöre atıfta bulunma kelimesi rails g model Product …iyi.)
Asherah


0

ROR'da diğerine referans veren bir model oluşturmak çok basittir.

raylar g modeli Öğe adı: dize açıklaması: metin ürün: referanslar

Bu kod, Öğe tablosuna 'product_id' sütunu ekleyecek


0

Model oluştururken bahsedebileceğiniz birçok veri türü vardır, bazı örnekler şunlardır:

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

sözdizimi:

field_type:data_type

0

Aynı sorunu vardı, ama benim kod biraz farklıydı.

def new
 @project = Project.new
end

Ve formum şöyle görünüyordu:

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

Bu tamamen doğruydu, bu yüzden nasıl anlayacağımı bilmiyordum.

Son olarak,

url: { projects: :create }

sonra

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

benim için çalıştı.


Bu iyi bir cevap olabilir ama saha türleri (hakkındadır OP ile ilgilidir emin değilim :integer, :stringvb ...).
Meltemi
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.