สร้างคอนโทรลเลอร์ด้วยฟังก์ชัน RESTful ทั้งหมด


86

ฉันกำลังพยายามสร้างคอนโทรลเลอร์ที่มีการดำเนินการ RESTful ทั้งหมดที่หยุดชะงัก ฉันได้อ่านที่Wikibooks - Ruby on Railsสิ่งที่ฉันต้องทำคือเรียกเครื่องกำเนิดไฟฟ้าด้วยชื่อคอนโทรลเลอร์และฉันจะได้รับสิ่งนั้น ฉันวิ่งไปscript/generate rspec_controller Propertiesแต่มีคอนโทรลเลอร์ที่ว่างเปล่า

ข้อเสนอแนะอื่น ๆ จะได้รับการชื่นชมอย่างมาก


1
thenduks, ถ้าฉันมีประสบการณ์เหมือนคุณนั่นจะเป็นความจริง แต่ฉันไม่รู้ด้วยซ้ำว่าการกระทำ 7 อย่างที่สงบจากด้านบนของหัวของฉันดังนั้นฉันจะต้อง google รายการแล้วสลับไปมาระหว่างเพจกับของฉัน แอปเพื่อป้อนแต่ละแอป เมื่อฉันรู้จักพวกเขาฉันยอมรับว่าการแก้ปัญหาของคุณง่ายขึ้น
Barb

คำตอบ:


143

ฉันไม่รู้เกี่ยวกับวิธีการทำงานอัตโนมัติ แต่ถ้าคุณทำ:

script/generate controller your_model_name_in_plural new create update edit destroy index show

ทั้งหมดนี้จะถูกสร้างขึ้นสำหรับคุณ

อัปเดตสำหรับ Rails 4

rails g scaffold_controller Property

7
คำตอบที่ดี ผู้เชี่ยวชาญสามารถเพิกเฉยต่อส่วนที่เหลือได้ หมายเหตุถึง noobs - ถ้าคุณตั้งชื่อคอนโทรลเลอร์ PropertyController ตามที่ฉันเข้าใจผิด :) คุณจะได้รับ PropertyController Controller :)
Barb

2
คำตอบของฉันเหมือนกันทุกประการยกเว้นว่าคุณไม่จำเป็นต้องระบุการกระทำ 7 ค่าเริ่มต้นทั้งหมด
konung

4
หมายเหตุ ... สิ่งนี้สร้างเฉพาะคอนโทรลเลอร์ที่มีเมธอดที่ตั้งชื่อสำหรับการกระทำ CRUD พื้นฐาน เส้นทางอยู่ห่างจาก RESTful ... เช่นroute get "mycontroller/create"(สร้างควรเป็นโพสต์)
rthbound

ฉันยอมรับว่าคำตอบนี้เหมาะสำหรับการกระทำแบบกำหนดเองทั่วไปมากกว่าซึ่งไม่ได้เคารพในอนุสัญญา RESTful ที่ต้องการ
prusswan

คำตอบนี้ล้าสมัยสำหรับราง 4 ดูคำตอบของ konung สำหรับ Rails 4
toobulkeh

97

ใน Rails 3 rails generate scaffold_controller ...นอกจากนี้ยังมี ข้อมูลเพิ่มเติมที่นี่


1
ฉันชอบวิธีนี้มากกว่าเพราะมันสร้างเส้นทาง RESTful การใช้rails g controller Foos createจะสร้างเส้นทางget '/create'ที่ไม่น่าสนใจเลย
rthbound

37

แก้ไข (เนื่องจากความคิดเห็นบางส่วน) : คำถามเดิมคือในปี 2010 - ดังนั้นคำตอบไม่ใช่สำหรับ RAILS 4 แต่สำหรับราง 2 !!

ลองใช้นั่งร้าน

script/generate scaffold controller Properties

ส่วนของเอกสารอย่างเป็นทางการเกี่ยวกับ Ruby On Rails

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

แก้ไข: สำหรับ RAILS 4

rails g scaffold_controller Property


คุณสามารถสคริปต์ / สร้างคุณสมบัติตัวควบคุม rspec_scaffold ได้หรือไม่
Barb

ใช่คุณทำได้ นี่คือรายละเอียดข้อมูล / บทช่วยสอน: blog.davidchelimsky.net/2007/05/14/…
konung

ฉันสงสัยว่าคำตอบนี้ล้าสมัยสำหรับ Rails เวอร์ชันล่าสุด มันจะสร้างโครงทั้งหมดสำหรับวัตถุ / รุ่นที่เรียกว่า "คอนโทรลเลอร์"
prusswan

4
ใช่ที่เขียนขึ้นในปี 2010 สำหรับเวอร์ชัน 2 สิ่งที่ตามมาจากคำถาม ตอนนี้ (Rails 4) จะมีลักษณะดังนี้: Rails g scaffold_controller Property (scaffold_controller จะเรียกใช้ scaffolding และคุณต้องระบุชื่อรุ่น (เอกพจน์) แต่ไม่ต้อง)
konung

2
ฉันสามารถตรวจสอบได้ว่าrails g scaffold_controller Propertyทำงานในราง 3.2 ได้เช่นกัน สิ่งนี้จะสร้าง PropertiesController ที่มีการดำเนินการ RESTful เริ่มต้นทั้งหมด 7 รายการและมุมมองที่เกี่ยวข้องโดยไม่มีโมเดล
mkralla11

15

ใน Rails 4/5 คำสั่งต่อไปนี้เป็นเคล็ดลับสำหรับฉัน

rails g scaffold_controller Property --skip-template-engine

มันสร้างการกระทำของคอนโทรลเลอร์ แต่ไม่ใช่มุมมอง


9

ราง 5.1

จุดเริ่ม:

คุณได้สร้างรูปแบบโดยไม่ต้องควบคุมหรือมุมมอง (เช่นผ่าน: rails generate model category)

วัตถุประสงค์:

อัปเกรดเป็นทรัพยากร RESTful เต็มรูปแบบ

คำสั่ง:

rails generate scaffold_controller category

มันแยกตัวควบคุมแบบนั่งร้านออกการกระทำที่น่ารังเกียจเจ็ดประการและมุมมองที่เกี่ยวข้อง (หมายเหตุ: คุณสามารถส่งชื่อรุ่น CamelCased หรือ under_scored ก็ได้)

เอาท์พุต:

varus@septimusSrv16DEV4:~/railsapps/dblirish$ rails generate scaffold_controller category
Running via Spring preloader in process 45681
      create  app/controllers/categories_controller.rb
      invoke  erb
      create    app/views/categories
      create    app/views/categories/index.html.erb
      create    app/views/categories/edit.html.erb
      create    app/views/categories/show.html.erb
      create    app/views/categories/new.html.erb
      create    app/views/categories/_form.html.erb
      invoke  test_unit
      create    test/controllers/categories_controller_test.rb
      invoke  helper
      create    app/helpers/categories_helper.rb
      invoke    test_unit
      invoke  jbuilder
      create    app/views/categories/index.json.jbuilder
      create    app/views/categories/show.json.jbuilder
      create    app/views/categories/_category.json.jbuilder

7

คุณกำลังมองหานั่งร้าน

ลอง:

script/generate scaffold Property

สิ่งนี้จะให้ตัวควบคุมโมเดลการโยกย้ายและการทดสอบที่เกี่ยวข้องกับคุณ --skip-migrationคุณสามารถข้ามการย้ายถิ่นที่มีตัวเลือก ถ้าคุณไม่ต้องการคนอื่นคุณจะต้องลบออกเอง ไม่ต้องกังวลกับการเขียนทับไฟล์ที่มีอยู่ซึ่งจะไม่เกิดขึ้นเว้นแต่คุณจะใช้--forceไม่ต้องกังวลเกี่ยวกับการเขียนทับไฟล์ที่มีอยู่ว่าจะไม่เกิดขึ้นถ้าคุณใช้

ดังที่ klew ชี้ให้เห็นในความคิดเห็นสิ่งนี้ยังกำหนดเนื้อความของวิธีการสำหรับคุณไม่ใช่แค่ชื่อ การใช้เป็นจุดเริ่มต้นสำหรับคอนโทรลเลอร์ REST ของคุณมีประโยชน์มาก


@ บาร์บฉันคิดว่า Scaffolding น่าจะดีกว่าสำหรับคุณเพราะมันไม่เพียง แต่ประกาศฟังก์ชันทั้งหมดเท่านั้น แต่ยังกำหนดฟังก์ชันเหล่านี้ด้วย เป็นการดีที่จะสร้างอย่างน้อยหนึ่งครั้งและมีไว้เป็นตัวอย่าง
klew

6

ใน Rails 4 คือ rails g controller apps new create update edit destroy show index

หรือrails generate controller apps new create update edit destroy show indexถ้าอยากเขียนเต็มเทอม :).


และสำหรับคอนโทรลเลอร์ที่มีชื่อยาวกว่า (เช่น line_items) ราง g คอนโทรลเลอร์ LineItems
Tommyixi

1
คุณสามารถใช้rails g scaffold_controller appsใน Rails 4
wrdevos

2

สคริปต์ / สร้างคุณสมบัติ rspec_scaffold


และใช่ฉันรู้ว่าคุณได้ยอมรับคำตอบนี้แล้ว แต่ฉันรู้สึกว่าวิธีนี้อาจช่วยบางคนที่อ่านโพสต์นี้ได้เช่นกัน .... วิธีแก้ปัญหาข้างต้นจะสร้างโมเดล ฯลฯ ซึ่งคุณสามารถลบได้หาก คุณไม่ต้องการ
stephenmurdoch

0

ไม่มีทาง (ที่ฉันรู้? ที่มีการบันทึกไว้?) ที่จะดึงตัวควบคุมออกมายกเว้นผ่านนั่งร้าน แต่คุณสามารถทำได้:

script/generate controller WhateverController new create edit update destroy show

คำตอบที่ดีฉันคิดว่าคุณพลาดการกระทำไม่มี 7 การกระทำ?
Barb

0

วิธีแก้ไขอย่างหนึ่งคือสร้างสคริปต์ที่ยอมรับพารามิเตอร์หนึ่งชื่อคอนโทรลเลอร์และให้สคริปต์พิมพ์คำสั่งทั้งหมดให้คุณ


  1. สร้างไฟล์ใหม่เช่น railgcontroller
  2. ทำให้สามารถเรียกใช้งานได้และบันทึกไว้บนเส้นทาง
  3. เรียกใช้เช่น: $ railgcontroller Articles

die () {
    echo "Please supply new rails controller name to generate."
    echo >&2 "$@"
    exit 1
}

[ "$#" -eq 1 ] || die "1 argument required, $# provided"

rails g controller "$1" new create update edit destroy show index
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.