วิธีการเรียกใช้ `รางสร้างนั่งร้าน 'เมื่อแบบจำลองมีอยู่แล้ว?


332

ฉันยังใหม่กับ Rails ดังนั้นโครงการปัจจุบันของฉันจึงอยู่ในสภาพประหลาด

หนึ่งในสิ่งแรกที่ฉันสร้างคือโมเดล "ภาพยนตร์" จากนั้นฉันก็เริ่มกำหนดรายละเอียดเพิ่มเติมเพิ่มวิธีการ ฯลฯ

ตอนนี้ฉันรู้แล้วว่าฉันควรสร้างมันขึ้นมาrails generate scaffoldเพื่อเชื่อมโยงสิ่งต่างๆเช่นการกำหนดเส้นทางมุมมองตัวควบคุม ฯลฯ

ฉันพยายามสร้างนั่งร้าน แต่ฉันพบข้อผิดพลาดว่ามีไฟล์การโยกย้ายที่ใช้ชื่อเดียวกันนี้อยู่แล้ว

วิธีที่ดีที่สุดสำหรับฉันในการสร้างนั่งร้านสำหรับ "ภาพยนตร์" ของฉันคืออะไรตอนนี้ (ใช้ราง 3)


1
อาจเป็นการดีที่สุดที่จะเขียนตัวควบคุมมุมมองและเส้นทาง คุณจะได้เรียนรู้เพิ่มเติมเกี่ยวกับแนวคิด
เบ็น Aubin

1
เห็นด้วยกับ @ penne12 อย่างน้อยก็ในช่วงแรกจนกว่าคุณจะคุ้นเคยกับแนวคิดเพื่อให้คุณรู้ว่าโค้ดทั้งหมดกำลังทำอะไรที่สร้างขึ้นสำหรับคุณ
mydoghasworms

ไม่เกี่ยวข้องโดยตรง แต่ถ้าคุณเคยทำผิดพลาดให้ใช้ rails ทำลาย <etc> ฉันจำได้ว่ามันมีประโยชน์จริง ๆ เมื่อฉันเริ่ม
Helsing

1
@BenAubin แต่ทว่าความสวยงามของ Rails นั้นไม่จำเป็นต้องเขียนไปอย่างต่อเนื่อง
Romuloux

คำตอบ:


596

TL; DR :rails g scaffold_controller <name>

แม้ว่าคุณจะมีโมเดลอยู่แล้ว แต่คุณยังสามารถสร้างไฟล์คอนโทรลเลอร์และไฟล์การโยกย้ายที่จำเป็นได้โดยใช้rails generateตัวเลือก หากคุณเรียกใช้rails generate -hคุณสามารถเห็นตัวเลือกทั้งหมดที่มีให้คุณ

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

scaffold_controllerหากคุณต้องการที่จะสร้างนั่งร้านควบคุมสำหรับรูปแบบของคุณให้ดู เพียงเพื่อความชัดเจนนี่คือคำอธิบายเกี่ยวกับที่:

แยกออกจากตัวควบคุมนั่งร้านและมุมมองของมัน ผ่านชื่อรุ่นทั้ง CamelCased หรือ under_scored และรายการมุมมองเป็นอาร์กิวเมนต์ ชื่อคอนโทรลเลอร์ถูกเรียกคืนเป็นเวอร์ชันพหูพจน์ของชื่อรุ่น

หากต้องการสร้างคอนโทรลเลอร์ภายในโมดูลให้ระบุชื่อรุ่นเป็นพา ธ เช่น 'parent_module / controller_name'

สิ่งนี้สร้างคลาสตัวควบคุมในแอพ / ตัวควบคุมและเรียกใช้ตัวช่วยแม่แบบเครื่องยนต์และตัวสร้างเฟรมงานทดสอบ

ในการสร้างทรัพยากรของคุณคุณต้องใช้ตัวresourceสร้างและสร้างการย้ายข้อมูลคุณยังสามารถเห็นตัวmigrationสร้าง (ดูมีรูปแบบของความบ้าคลั่งนี้ทั้งหมด) ตัวเลือกเหล่านี้มีตัวเลือกในการสร้างไฟล์ที่หายไปเพื่อสร้างทรัพยากร หรือคุณสามารถเรียกใช้เพียงrails generate scaffoldกับ--skipเลือกที่จะข้ามไฟล์ใด ๆ ที่มีอยู่ :)

ฉันแนะนำให้ใช้เวลาดูตัวเลือกต่างๆภายในเครื่องปั่นไฟ มันเป็นสิ่งที่ฉันไม่รู้สึกว่าได้รับการบันทึกไว้เป็นอย่างดีในหนังสือและเช่นนั้น แต่มันมีประโยชน์มาก


12
ว้าวคำตอบที่ดีที่สุดข้อหนึ่งที่ฉันเคยได้รับมาจากคำถามการเขียนโปรแกรม ขอบคุณ!
ลาน

12
ฉันมีโมเดลที่มีอยู่แล้วและการทำrails generate scaffold_controller MyModelจะสร้างเลเยอร์มุมมอง แต่ไม่รวมแอตทริบิวต์โมเดล (คอลัมน์ตาราง) และคุณต้องเพิ่มโมเดลเหล่านั้นด้วยมือ มีใครรู้วิธีการแก้ปัญหานี้หรือไม่? ฉันอยู่บนราง 3.2.8
aaronbartell

@aaronbartell คุณกำลังขอให้ Rails สร้าง 'scaffold_controller' ซึ่งไม่สนใจคุณสมบัติของแบบจำลอง สิ่งนี้ไม่เสียหายถ้าคุณต้องการสร้างแบบจำลองด้วยเช่นกันคุณต้องการgenerate scaffoldถ้าคุณมีแบบจำลอง แต่คุณต้องการตัวควบคุมนั่งร้านและคุณลักษณะใหม่ที่เพิ่มเข้าไปในแบบจำลองที่คุณต้องการscaffold_generatorตามmigrationด้วยฟิลด์ที่คุณกำลังเปลี่ยนแปลง
Lee Jarvis

9
@Lee - ไม่มีแอรอนบาร์เทลถามว่าทำไม scaffold_controller ไม่สร้างอินพุตมุมมองที่สอดคล้องกันสำหรับแอตทริบิวต์ที่มีอยู่ของโมเดลที่ส่งผ่านไปซึ่งเป็นคำถามที่ถูกต้อง ... stackoverflow.com/q/17153864/165673
Yarin

67

คำตอบที่ดีโดยLee Jarvisนี่เป็นเพียงคำสั่งเช่น; เรามีโมเดลที่มีอยู่แล้วชื่อผู้ใช้แล้ว:

rails g scaffold_controller User

10
ขอบคุณสำหรับพวกเราที่ขี้เกียจเกินกว่าที่จะอ่านย่อหน้าของข้อความ!
Chris Cirefice

30

สำหรับผู้ที่เริ่มต้นแอพพลิเคชั่นทางรถไฟที่มีฐานข้อมูลที่มีอยู่จะมีอัญมณีเจ๋ง ๆ ที่เรียกว่าschema_to_scaffoldสร้างสคริปต์ scaffold มันเอาท์พุท:

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

จากคุณschema.rbเปลี่ยนชื่อเป็นschema.rb. Check it


2
นี่คืออัญมณี litle ที่ดีมันจะช่วยฉันได้มาก! ควรติดตั้งไว้ใน Rails!
Peter Andersson

13

ในRails 5คุณยังคงสามารถใช้งานได้

$rails generate scaffold movie --skip

เพื่อสร้างไฟล์นั่งร้านที่หายไปทั้งหมดหรือ

rails generate scaffold_controller Movie

เพื่อสร้างตัวควบคุมและดูเท่านั้น

สำหรับคำอธิบายที่ดีกว่าลองดูที่นั่งร้านราง



10

คุณสามารถใช้scaffold_controllerและจำไว้ว่าต้องผ่านattributesโมเดลมิฉะนั้นโครงจะถูกสร้างขึ้นโดยไม่มีคุณสมบัติ

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

คำสั่งนี้จะสร้างไฟล์ต่อไปนี้:

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
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.