Những gì tôi không biết về lệnh “rails generate”

Tram Ho

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:

Để 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ụ:

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?

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:

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!

Chia sẻ bài viết ngay

Nguồn bài viết : Viblo