The Generators
Lệnh rails generate
nổi tiếng là 1 phần của trình rails generators
Rails bao gồm rất nhiều trình generators mặc định và nổi tiếng nhất là rails new
cho phép chúng ta tạo các ứng dụng rails mới.
Bạn có thể truy cập danh sách tất cả các generators mặc định bằng cách vào một ứng dụng rails và nhập rails generate
, sẽ thấy 23 generators dưới đây được chia thành 3 loại:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | Rails: application_record assets channel controller generator helper integration_test jbuilder job mailbox mailer migration model resource scaffold scaffold_controller system_test task ActiveRecord: active_record:application_record TestUnit: test_unit:channel test_unit:generator test_unit:mailbox test_unit:plugin |
Để biết thêm chi tiết về một generators, chỉ cần chaỵ lệnh rails create my_generator_name --help
How Does it Work?
Trong Repo của Rails, bạn có thể tìm thấy phần code cho các rails generators trong thư mục rails/generators
:
Bạn có nhớ danh sách generators này từ danh sách trên không? Có một group gồm 18 generators và nếu bạn mở tệp đường dẫn nhuư trên ảnh chụp màn hình, bạn có thể kiểm tra code cho các trình tạo này (model, controller, scaffold, v.v.).
Tôi sẽ không giải thích cách hoạt động của mỗi generators, tất cả đều khác nhau, nhưng tôi nhận thấy một số điều:
- Như document của Rails đã nói, khi một generator được gọi, từng phương thức public trong generator được thực thi tuần tự theo thứ tự mà nó được định nghĩa.
- Generators được xây dựng với Thor. Nếu bạn nhìn vào lớp
base.rb
, bạn sẽ thấy lớp kế thừa từ Thor. Document rails thông báo rằng Thor cung cấp các options mạnh mẽ để phân tích cú pháp và một API tuyệt vời để thao tác các tệp. - Chúng ta có thể tạo generators tùy chỉnh của riêng mình – haỹ cùng xem cách thực hiện trong phần tiếp theo.
- Ngoài ra, ta có thể vô hiệu hóa hành vi mặc định của bất kỳ generator nào bằng cách vào
config/application.rb
, thêm các tùy chọn bên trong khối config.generators. Ví dụ:
1 2 3 4 5 | # This will disable the generation of the stylesheets files config.generators do |g| g.scaffold_stylesheet false end |
You Can Create Custom Generators
Nếu trình rails generators mặc định không đủ đối với bạn, bạn có thể tạo trình rails generators của riêng mình. Ví dụ: để tạo dịch vụ mới dịch vụ rails g hoặc để tạo bộ generators mới rails g initializer
, v.v.
Rails generate generator
Bạn còn nhớ danh sách generators này mà chúng ta đã thấy ở đầu bài viết?
Yes, Rails có một trình generators mặc định cho phép bạn tạo trình generators cho riêng mình!
Generate an initializer generator?
1 2 3 4 5 6 7 8 | rails generate generator initializer create lib/generators/initializer create lib/generators/initializer/initializer_generator.rb create lib/generators/initializer/USAGE create lib/generators/initializer/templates invoke test_unit create test/lib/generators/initializer_generator_test.rb |
Tạo thư mục lib/generators/initializer.
Tạo tệp initializer_generator.rb
kế thừa từ Rails::Generators::NamedBase
. Như doc Rails đã nói, điều này có nghĩa là trình generators của chúng ta mong đợi ít nhất một đối số, đó sẽ là tên của trình generators và sẽ có sẵn trong code của chúng ta dưới dạng tên biến.
Phương thức source_root
trỏ đến nơi các template của generators của chúng ta sẽ được đặt.
Tạo tệp USAGE, nó thực sự sẽ là document cho trình generator tùy chỉnh:
Khi tôi chạy rails generate initializer --help
trong terminal, thấy như sau:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | Usage: rails generate initializer NAME [options] Options: [--skip-namespace], [--no-skip-namespace] # Skip namespace (affects only isolated applications) Runtime options: -f, [--force] # Overwrite files that already exist -p, [--pretend], [--no-pretend] # Run but do not make any changes -q, [--quiet], [--no-quiet] # Suppress status output -s, [--skip], [--no-skip] # Skip files that already exist Description: Explain the generator Example: Hello from the initializer doc This will create: a/new/initializer |
Ta tạo thư mục lib/generators/initializer/templates. Thư mục này sẽ bao gồm template cơ bản cho trình tạo generator tùy chỉnh của bạn.
Cuối cùng, tạo tệp initializer_generator_test.rb cho các thử nghiệm của chúng ta.
Last word
Nếu bạn muốn biết thêm về cách tạo trình tạo tùy chỉnh, tham khảo thêm hướng dẫn này và document Rails chính thức.
Hy vọng bạn đã học được một cái gì đó. Hãy cho tôi biết phản hồi của bạn, tôi rất muốn cải thiện chất lượng của bài viết! Cảm ơn bạn!