Bagaimana menjalankan `rails generate scaffold` ketika model sudah ada?

332

Saya baru mengenal Rails sehingga proyek saya saat ini dalam keadaan aneh.

Salah satu hal pertama yang saya hasilkan adalah model "Film". Saya kemudian mulai mendefinisikannya lebih detail, menambahkan beberapa metode, dll.

Saya sekarang menyadari bahwa saya seharusnya membuatnya dengan rails generate scaffoldmenghubungkan hal-hal seperti perutean, pandangan, pengontrol, dll.

Saya mencoba membuat perancah tetapi saya mendapatkan kesalahan dengan mengatakan file migrasi dengan nama yang sama sudah ada.

Apa cara terbaik bagi saya untuk membuat scaffolding untuk "Film" saya sekarang? (menggunakan rel 3)

Lan
sumber
1
Mungkin terbaik untuk menulis pengendali, tampilan, dan rute Anda sendiri. Anda akan belajar lebih banyak tentang konsep-konsepnya
Ben Aubin
1
Setuju dengan @ penne12. Setidaknya pada awalnya, sampai Anda merasa nyaman dengan konsep-konsepnya, sehingga Anda tahu apa yang dilakukan semua kode yang dihasilkan untuk Anda.
mydoghasworms
Tidak relevan secara langsung tetapi jika Anda pernah mengacau, gunakan rel hancurkan <etc>. Saya ingat ini sangat berguna ketika saya mulai.
Helsing
1
@BenAubin, sementara benar, keindahan Rails adalah tidak harus terus menulis boilerplate.
Romuloux

Jawaban:

596

TL; DR :rails g scaffold_controller <name>

Meskipun Anda sudah memiliki model, Anda masih dapat membuat file pengontrol dan migrasi yang diperlukan dengan menggunakan rails generateopsi. Jika Anda menjalankan, rails generate -hAnda dapat melihat semua opsi yang tersedia untuk Anda.

Rails:
  controller
  generator
  helper
  integration_test
  mailer
  migration
  model
  observer
  performance_test
  plugin
  resource
  scaffold
  scaffold_controller
  session_migration
  stylesheets

Jika Anda ingin membuat scaffold controller untuk model Anda, lihat scaffold_controller. Untuk kejelasan, inilah uraiannya:

Menghentikan controller scaffolded dan pandangannya. Lulus nama model, baik CamelCased atau under_scored, dan daftar tampilan sebagai argumen. Nama pengontrol diambil sebagai versi nama nama model yang jamak.

Untuk membuat pengontrol di dalam modul, tentukan nama model sebagai jalur seperti 'parent_module / controller_name'.

Ini menghasilkan kelas controller di app / controllers dan memanggil helper, engine template, dan generator framework pengujian.

Untuk membuat sumber daya Anda, Anda akan menggunakan resourcegenerator, dan untuk membuat migrasi, Anda juga dapat melihat migrationgenerator (lihat, ada pola untuk semua kegilaan ini). Ini memberikan opsi untuk membuat file yang hilang untuk membangun sumber daya. Atau Anda dapat menjalankan rails generate scaffolddengan --skipopsi untuk melewati file apa pun yang ada :)

Saya sarankan meluangkan waktu untuk melihat opsi di dalam generator. Mereka sesuatu yang saya rasa tidak didokumentasikan dengan sangat baik dalam buku-buku dan semacamnya, tetapi mereka sangat berguna.

Lee Jarvis
sumber
12
wow, salah satu jawaban terbaik yang pernah saya dapatkan untuk pertanyaan pemrograman. Terima kasih!
Lan
12
Saya juga memiliki model yang ada dan melakukan rails generate scaffold_controller MyModeltidak menghasilkan lapisan tampilan tetapi tidak termasuk atribut model (kolom tabel) dan Anda harus menambahkannya dengan tangan. Adakah yang tahu tentang perbaikan untuk ini? Saya di Rails 3.2.8.
aaronbartell
@ aaronbartell Anda meminta Rails untuk menghasilkan 'scaffold_controller' yang tidak peduli dengan atribut model. Ini tidak rusak, jika Anda ingin model yang dihasilkan juga maka Anda ingin generate scaffoldjika Anda memiliki model tetapi Anda ingin controller perancah dan atribut baru ditambahkan ke model yang Anda inginkan scaffold_generatordiikuti migrationdengan bidang yang Anda ubah
Lee Jarvis
9
@Lee - Tidak ada aaronbartell yang bertanya mengapa scaffold_controller tidak menghasilkan input tampilan yang sesuai untuk atribut model yang ada yang diteruskan ke sana, yang merupakan pertanyaan yang valid ... stackoverflow.com/q/17153864/165673
Yarin
67

Jawaban yang bagus oleh Lee Jarvis, ini hanya perintah misalnya; kami sudah memiliki model yang sudah ada bernama Pengguna:

rails g scaffold_controller User
tokhi
sumber
10
Terima kasih, untuk kita yang malas membaca paragraf teks!
Chris Cirefice
30

Untuk yang memulai aplikasi rel dengan basis data yang ada ada permata keren yang dipanggil schema_to_scaffolduntuk membuat skrip perancah. itu output:

rails g scaffold users fname:string lname:string bdate:date email:string encrypted_password:string

dari schema.rbnama kami Anda Anda yang sudah diubah. schema.rb. Periksa

frenesim
sumber
2
Ini adalah permata litle yang hebat, itu akan banyak membantu saya! Harus terpasang di dalam Rails!
Peter Andersson
13

Di Rails 5 , Anda masih bisa berlari

$rails generate scaffold movie --skip

untuk membuat semua file perancah yang hilang atau

rails generate scaffold_controller Movie

untuk membuat pengontrol dan hanya melihat.

Untuk penjelasan yang lebih baik, periksa scaffold rails

Nesha Zoric
sumber
12

Perintah ini harus melakukan trik:

$ rails g scaffold movie --skip
Andrew Hendrie
sumber
10

Anda dapat menggunakan scaffold_controllerdan ingat untuk melewati attributesmodel, atau perancah akan dihasilkan tanpa atribut.

rails g scaffold_controller User name email
# or
rails g scaffold_controller User name:string email:string

Perintah ini akan menghasilkan file berikut:

create  app/controllers/users_controller.rb
invoke  haml
create    app/views/users
create    app/views/users/index.html.haml
create    app/views/users/edit.html.haml
create    app/views/users/show.html.haml
create    app/views/users/new.html.haml
create    app/views/users/_form.html.haml
invoke  test_unit
create    test/controllers/users_controller_test.rb
invoke  helper
create    app/helpers/users_helper.rb
invoke    test_unit
invoke  jbuilder
create    app/views/users/index.json.jbuilder
create    app/views/users/show.json.jbuilder
Deepak Mahakale
sumber