Làm thế nào để chạy `rails tạo ra giàn giáo 'khi mô hình đã tồn tại?


331

Tôi mới sử dụng Rails nên dự án hiện tại của tôi đang ở trạng thái kỳ lạ.

Một trong những điều đầu tiên tôi tạo ra là mô hình "Phim". Sau đó tôi bắt đầu xác định nó chi tiết hơn, thêm một vài phương thức, v.v.

Bây giờ tôi nhận ra rằng tôi nên tạo ra nó rails generate scaffoldđể kết nối những thứ như định tuyến, khung nhìn, bộ điều khiển, v.v.

Tôi đã cố gắng tạo ra giàn giáo nhưng tôi gặp lỗi khi nói một tệp di chuyển có cùng tên đã tồn tại.

Cách tốt nhất để tôi tạo giàn giáo cho "Phim" của mình bây giờ là gì? (sử dụng đường ray 3)


1
Có lẽ tốt nhất để viết bộ điều khiển và quan điểm và tuyến đường của riêng bạn. Bạn sẽ tìm hiểu thêm về các khái niệm
Ben Aubin

1
Đồng ý với @ penne12. Ít nhất là vào lúc bắt đầu, cho đến khi bạn cảm thấy thoải mái với các khái niệm, để bạn biết tất cả những gì mã đang làm được tạo ra cho bạn.
mydoghasworms

Không liên quan trực tiếp nhưng nếu bạn gặp rắc rối, hãy sử dụng đường ray phá hủy <etc>. Tôi nhớ điều này thực sự hữu ích khi tôi bắt đầu.
Helsing

1
@BenAubin, trong khi sự thật, vẻ đẹp của Rails là không phải liên tục viết bản tóm tắt.
Romuloux

Câu trả lời:


596

TL; DR :rails g scaffold_controller <name>

Mặc dù bạn đã có một mô hình, bạn vẫn có thể tạo các tệp điều khiển và di chuyển cần thiết bằng cách sử dụng rails generatetùy chọn. Nếu bạn chạy, rails generate -hbạn có thể thấy tất cả các tùy chọn có sẵn cho bạn.

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

Nếu bạn muốn tạo một bộ điều khiển cho mô hình của mình, hãy xem scaffold_controller. Để rõ ràng, đây là mô tả về điều đó:

Khai thác một bộ điều khiển giàn giáo và quan điểm của nó. Vượt qua tên mô hình, CamelCasing hoặc under_scored và danh sách các khung nhìn làm đối số. Tên bộ điều khiển được truy xuất dưới dạng phiên bản số nhiều của tên mô hình.

Để tạo bộ điều khiển trong một mô-đun, chỉ định tên mô hình là một đường dẫn như 'Parent_module / control_name'.

Điều này tạo ra một lớp trình điều khiển trong ứng dụng / bộ điều khiển và gọi trình trợ giúp, công cụ mẫu và trình tạo khung kiểm tra.

Để tạo tài nguyên của bạn, bạn sẽ sử dụng trình resourcetạo và để tạo di chuyển, bạn cũng có thể thấy trình migrationtạo (xem, có một mẫu cho tất cả sự điên rồ này). Chúng cung cấp các tùy chọn để tạo các tệp bị thiếu để xây dựng tài nguyên. Ngoài ra, bạn chỉ có thể chạy rails generate scaffoldvới --skiptùy chọn bỏ qua bất kỳ tệp nào tồn tại :)

Tôi khuyên bạn nên dành thời gian xem xét các tùy chọn bên trong máy phát điện. Chúng là những thứ tôi không cảm thấy được ghi lại trong sách rất hay, nhưng chúng rất tiện dụng.


12
wow, một trong những câu trả lời hay nhất tôi từng nhận được cho một câu hỏi lập trình. cảm ơn!
Lan

12
Tôi cũng có các mô hình hiện có và thực hiện việc rails generate scaffold_controller MyModeltạo lớp khung nhìn nhưng nó không bao gồm các thuộc tính mô hình (cột bảng) và bạn phải thêm chúng bằng tay. Bất cứ ai biết một sửa chữa cho điều này? Tôi đang trên đường ray 3.2.8.
aaronbartell

@aaronbartell Bạn đang yêu cầu Rails tạo ra một 'scaffold_controll' mà không quan tâm đến các thuộc tính mô hình. Điều này không bị phá vỡ, nếu bạn muốn một mô hình được tạo quá thì bạn muốn generate scaffoldnếu bạn có một mô hình nhưng bạn muốn một bộ điều khiển giàn giáo và các thuộc tính mới được thêm vào một mô hình bạn muốn scaffold_generatortheo sau migrationvới các trường bạn đang thay đổi
Lee Jarvis

9
@Lee - Không có aaronbartell đang hỏi làm thế nào mà scaffold_controll không tạo ra các đầu vào khung nhìn tương ứng cho các thuộc tính hiện có của mô hình được truyền cho nó, đó là một câu hỏi hợp lệ ... stackoverflow.com/q/17153864/165673
Yarin

67

Câu trả lời tuyệt vời bởi Lee Jarvis, đây chỉ là lệnh ví dụ; chúng tôi đã có một mô hình hiện có tên là Người dùng:

rails g scaffold_controller User

10
Cảm ơn bạn, vì những người trong chúng ta quá lười biếng để đọc đoạn văn bản!
Chris Cirefice 04/03/2016

30

Đối với những người bắt đầu một ứng dụng rails với cơ sở dữ liệu hiện có, có một viên ngọc tuyệt vời được gọi schema_to_scaffoldđể tạo ra một kịch bản giàn giáo. nó xuất ra:

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

từ bạn schema.rbđổi tên của bạn schema.rb. Kiểm tra nó


2
Đây là một viên ngọc quý tuyệt vời, nó sẽ giúp tôi rất nhiều! Nên được tích hợp vào Rails!
Peter Andersson

13

Trong Rails 5 , bạn vẫn có thể chạy

$rails generate scaffold movie --skip

để tạo tất cả các tập tin giàn giáo bị thiếu hoặc

rails generate scaffold_controller Movie

để tạo bộ điều khiển và chỉ xem.

Để được giải thích rõ hơn, hãy kiểm tra đường ray



10

Bạn có thể sử dụng scaffold_controllervà nhớ để vượt qua attributesmô hình, hoặc giàn giáo sẽ được tạo mà không có các thuộc tính.

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

Lệnh này sẽ tạo các tệp sau:

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
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.