Sự khác biệt giữa tạo giàn giáo và tạo mô hình trong Rails là gì? Những ưu điểm/nhược điểm của việc làm là gì?Sự khác biệt giữa giàn giáo và mô hình trong Rails
Trả lời
Khi bạn tạo mô hình, bạn sẽ có được một mô hình cũng như một số thành phần liên quan. Một trong những cách yêu thích của tôi giải thích chủ đề như thế này là để thực sự thử nó ra hoặc khuyến khích người khác để thử nó, vì vậy nếu tôi được nhập lệnh rails generate model Foo name:string description:text
trong một dự án Rails, tôi sẽ nhận được:
invoke active_record
create db/migrate/20130719012107_create_foos.rb
create app/models/foo.rb
invoke test_unit
create test/unit/foo_test.rb
create test/fixtures/foos.yml
Đầu tiên dòng gọi Active Record
, về cơ bản gắn mô hình của bạn với cơ sở dữ liệu của bạn. Dòng tiếp theo tạo ra một tệp được gọi là tệp di chuyển. Tệp di chuyển chứa các hướng dẫn để thay đổi cơ sở dữ liệu của bạn. Tệp di chuyển đầu tiên này tạo bảng cơ sở dữ liệu được gọi là 'foos' và nó cũng sẽ tạo cột cho "name" và "description".
Dòng tiếp theo làm cho chính mô hình. Mô hình cơ bản là một lớp Ruby kế thừa từ Active Record. Điều này có nghĩa là bất kỳ phương thức nào có thể được gọi trong Active Record bây giờ có thể được gọi trong mô hình của bạn. Ba dòng cuối cùng về cơ bản tạo các tệp thử nghiệm có liên quan cho mô hình của bạn. Nếu bạn đang sử dụng RSpec, các tệp đặc tả sẽ được tạo thay thế.
Nếu ứng dụng Rails của bạn chỉ chứa các mô hình, bạn sẽ không có bất kỳ dạng xem nào hiển thị thông tin trên trang, cũng như bạn sẽ không có hướng dẫn kiểm soát luồng thông tin. Các lựa chọn của bạn sẽ là tạo ra các bộ điều khiển (mà lần lượt tạo ra các khung nhìn của bạn) hoặc để tạo ra một giàn giáo, tạo ra mô hình, khung nhìn, bộ điều khiển và ghi vào tệp routes.rb của bạn. Nếu tôi chạy rails generate scaffold foo
tôi sẽ nhận được:
invoke active_record
create db/migrate/20130719013307_create_foos.rb
create app/models/foo.rb
invoke test_unit
create test/unit/foo_test.rb
create test/fixtures/foos.yml
invoke resource_route
route resources :foos
invoke scaffold_controller
create app/controllers/foos_controller.rb
invoke erb
create app/views/foos
create app/views/foos/index.html.erb
create app/views/foos/edit.html.erb
create app/views/foos/show.html.erb
create app/views/foos/new.html.erb
create app/views/foos/_form.html.erb
invoke test_unit
create test/functional/foos_controller_test.rb
invoke helper
create app/helpers/foos_helper.rb
invoke test_unit
create test/unit/helpers/foos_helper_test.rb
invoke assets
invoke coffee
create app/assets/javascripts/foos.js.coffee
invoke scss
create app/assets/stylesheets/foos.css.scss
invoke scss
identical app/assets/stylesheets/scaffolds.css.scss
Để trả lời câu hỏi của bạn, lợi thế của giàn giáo là nó nhanh chóng, dễ dàng và tất cả mọi thứ được cấu hình sẵn cho bạn. Tuy nhiên, lợi thế của việc tạo ra các mô hình độc lập với giàn giáo (và sau đó lần lượt tạo ra bộ điều khiển/chế độ xem khi cần và tự viết tệp routes.rb) là bạn có nhiều quyền kiểm soát hơn đối với ứng dụng của mình và giao diện và chức năng, bạn tránh mã không cần thiết, bạn có thể sử dụng Phát triển theo hành vi hoặc Phát triển theo hướng thử nghiệm và có lẽ những thứ khác mà người khác có thể muốn thêm.
Lời khuyên cuối cùng của tôi là: Rails rất thân thiện với người dùng, vì vậy hãy thử tự thử nghiệm. Bạn có thể hoàn tác bất kỳ lệnh generate
nào có lệnh destroy
tương ứng, vì vậy, ví dụ rails destroy scaffold Foo
sẽ xóa tất cả các tệp được tạo bởi rails generate Scaffold Foo name:string description:string
, do đó bạn không phải lo lắng về việc không thể hủy ngang dự án bằng cách thử nghiệm.
Tạo một giàn giáo bao gồm tạo ra một mô hình mà còn tạo ra
- tuyến RESTful
- một bộ điều khiển với tất cả các hành động để xử lý RESTful của mô hình
- quan điểm cần thiết bởi bộ điều khiển
- kiểm tra khai
Giàn giáo là một khởi đầu tốt cho người dùng Rails mới.
Người dùng mới rất có thể sẽ bị nhầm lẫn bởi giàn giáo vì họ sẽ không hiểu cách tất cả các thành phần hoạt động cùng nhau. Giàn giáo có lẽ là tốt nhất cho những người dùng có kinh nghiệm muốn có một lối tắt cho công việc mà họ thường lặp lại.
Với
$rails generate scaffold <name>
bạn có thể tự động tạo ra một sẵn sàng sử dụng bộ điều khiển, mô hình, và quan điểm với một CRUD đầy đủ (Create, Read, Update, Delete) giao diện web. Đó là cách dễ dàng hơn và nhanh hơn so với việc tạo ra các mô hình, nhưng mã mà nó tạo ra dường như không hoàn hảo cho ứng dụng của bạn.
A scaffold tuyệt vời để sử dụng khi nói đến các ví dụ đơn giản, mô hình nhanh hoặc thử nghiệm.
Nếu bạn đổi ý và quyết định sử dụng giàn giáo sau khi đã tạo ra các mô hình, bạn luôn có thể chạy
$rails generate scaffold <name>
Nó sẽ tạo ra tất cả các file đã mất. Hoặc nếu bạn là ot hạnh phúc với việc sử dụng giàn giáo, bạn luôn có thể gỡ bỏ nó theo cách sau:
Tạo giàn giáo:
$rails generate scaffold Story
Nếu bạn di cư tập tin của bạn, thực hiện một rollback:
$rake db:rollback
Destroy hoặc hoàn tác giàn giáo: $ ray phá hủy giàn giáo Câu chuyện
Tôi cũng nên mã hóa tuổi bạn đọc bất kỳ Rails Hướng dẫn chính thức về các chủ đề này ... Tôi cung cấp một cái nhìn tổng quan khá cao về những thứ như Active Record và Migrations, nhưng hy vọng đủ để trả lời câu hỏi của bạn! – aceofbassgreg
câu trả lời tuyệt vời cảm ơn bạn rất nhiều, bạn đã giúp tôi rất nhiều – SsouLlesS
Tôi đã có cùng một câu hỏi. Lời giải thích tuyệt vời. Cảm ơn. – whitehat