53 câu hỏi phỏng vấn Ruby on Rails và câu trả lời hàng đầu (2025)

Dưới đây là những câu hỏi phỏng vấn Ruby on Rails và câu trả lời dành cho người mới bắt đầu cũng như ứng viên lập trình viên Ruby có kinh nghiệm để có được công việc mơ ước của mình.

1) Giải thích Ruby on Rails là gì?

  • Ruby: Đây là ngôn ngữ lập trình hướng đối tượng lấy cảm hứng từ PERL, Smalltalk, Eiffel, Ada, Basic và Lisp.
  • Đường ray: Đây là một khuôn khổ được sử dụng để xây dựng ứng dụng web

2) Giải thích thư viện lớp trong Ruby là gì?

Thư viện lớp trong Ruby bao gồm nhiều miền khác nhau, chẳng hạn như kiểu dữ liệu, lập trình luồng, nhiều miền khác nhau, v.v.

Tải xuống PDF miễn phí: Câu hỏi và câu trả lời phỏng vấn Ruby on Rails


3) Quy ước đặt tên trong Rails là gì?

  • Biến: Để khai báo Biến, tất cả các chữ cái đều viết thường và các từ được phân tách bằng dấu gạch dưới
  • Lớp và Mô-đun: Các mô-đun và lớp sử dụng MixedCase và không có dấu gạch dưới; mỗi từ bắt đầu bằng một chữ cái viết hoa
  • Bảng cơ sở dữ liệu: Tên bảng cơ sở dữ liệu phải có chữ thường và dấu gạch dưới giữa các từ và tất cả tên bảng phải ở dạng số nhiều, ví dụ invoice_items
  • Model: Nó được biểu diễn bằng MixedCase không ngắt quãng và luôn có số ít với tên bảng
  • Người điều khiển: Tên lớp bộ điều khiển được biểu diễn ở dạng số nhiều, trong đó OrdersController sẽ là bộ điều khiển cho bảng đơn hàng.

4) Giải thích “Yield” trong Ruby on Rails là gì?

Phương thức Ruby nhận được khối mã sẽ gọi khối mã đó bằng cách gọi nó với phương thức “Yield”.


5) Giải thích ORM (Object-Relationship-Model) trong Rails là gì?

ORM hay Mô hình quan hệ đối tượng trong Rails chỉ ra rằng các lớp của bạn được ánh xạ vào bảng trong cơ sở dữ liệu và các đối tượng được ánh xạ trực tiếp vào các hàng trong bảng.


6) Hãy cho biết sự khác biệt giữa false và nil trong Ruby?

Trong Ruby, false là một đối tượng của FalseClass để biểu diễn giá trị boolean, trong khi Nil là một đối tượng của NilClass biểu thị sự vắng mặt của giá trị. Nó có object_id là 4.

Câu hỏi phỏng vấn Ruby on Rails
Câu hỏi phỏng vấn Ruby on Rails


7) Hãy kể ra những mặt tích cực của Rails?

Rails cung cấp nhiều tính năng như

  • Siêu lập trình: Rails sử dụng thế hệ mã nhưng để nâng cao hiệu suất, nó dựa vào siêu lập trình. Ruby được coi là một trong những ngôn ngữ tốt nhất cho siêu lập trình.
  • Hồ sơ hoạt động: Nó lưu đối tượng vào cơ sở dữ liệu thông qua Active Record Framework. Phiên bản Rails của Active Record xác định cột trong lược đồ và tự động liên kết chúng với các đối tượng miền của bạn bằng cách sử dụng siêu lập trình
  • Đoạn đầu đài: Rails có khả năng tự động tạo ra mã dàn giáo hoặc mã tạm thời
  • Quy ước về cấu hình: Không giống như các khuôn khổ phát triển khác, Rails không yêu cầu nhiều cấu hình, nếu bạn tuân thủ quy ước đặt tên một cách cẩn thận
  • Ba môi trường: Rails có ba môi trường mặc định là thử nghiệm, phát triển và sản xuất.
  • Kiểm tra tích hợp: Nó hỗ trợ mã gọi là harness và fixtures tạo ra các trường hợp thử nghiệm để viết và thực thi.

8) Giải thích vai trò của thư mục con app/controllers và app/helpers là gì?

  • App/controllers: Một yêu cầu web từ người dùng được xử lý bởi Controller. Thư mục con controller là nơi Rails tìm kiếm các lớp controller
  • App/helpers: Thư mục con của helper chứa bất kỳ lớp helper nào được sử dụng để hỗ trợ các lớp view, model và controller.

9) Hãy cho biết sự khác biệt giữa String và Symbol là gì?

Cả hai đều hoạt động theo cùng một cách chỉ khác nhau ở hành vi trái ngược nhau. Sự khác biệt nằm ở object_id, bộ nhớ và quá trình điều chỉnh khi chúng được sử dụng cùng nhau. Symbol thuộc loại đối tượng bất biến trong khi String được coi là đối tượng có thể thay đổi.


10) Giải thích sự khác nhau giữa Symbol và biến?

Biểu tượng khác với các biến ở các khía cạnh sau

  • Nó giống một chuỗi hơn là một biến
  • Trong Ruby, chuỗi có thể thay đổi nhưng Symbol thì không thể thay đổi
  • Chỉ cần tạo một bản sao của biểu tượng
  • Các biểu tượng thường được sử dụng như tương ứng với enum trong Ruby

11) Giải thích Rails Active Record trong Ruby on Rails là gì?

Bản ghi hoạt động của Rails là lớp Ánh xạ đối tượng/quan hệ (ORM) được cung cấp cùng với Rails. Nó tuân theo mô hình ORM chuẩn như

  • Bản đồ bảng đến các lớp học
  • Hàng bản đồ tới các đối tượng
  • Các cột ánh xạ tới các thuộc tính của đối tượng

12) Giải thích cách Rails triển khai Ajax?

Trang web sử dụng công nghệ Ajax sẽ lấy trang web mới hoặc đã thay đổi từ máy chủ, không giống như các trang web khác mà bạn phải làm mới trang để có thông tin mới nhất.

Rails kích hoạt một hoạt động Ajax theo những cách sau

  • Một số vụ cháy do cò súng: Kích hoạt có thể là người dùng nhấp vào liên kết hoặc nút, người dùng gây ra những thay đổi đối với dữ liệu trong trường hoặc trên biểu mẫu
  • Máy khách web gọi máy chủ: Một phương thức Java-script, XMLHttpRequest, gửi dữ liệu được liên kết với trình kích hoạt đến trình xử lý hành động trên máy chủ. Dữ liệu có thể là ID của hộp kiểm, toàn bộ biểu mẫu hoặc văn bản trong trường nhập
  • Máy chủ thực hiện xử lý: Trình xử lý hành động phía máy chủ thực hiện một số thao tác với dữ liệu và truy xuất một HTML phân mảnh cho máy khách web
  • Khách hàng nhận được phản hồi: JavaScript phía máy khách, được Rails tự động tạo ra, nhận đoạn mã HTML và sử dụng nó để cập nhật một phần cụ thể của trang hiện tại

13) Hãy nêu cách bạn có thể tạo bộ điều khiển cho chủ đề?

Để tạo bộ điều khiển cho chủ đề, bạn có thể sử dụng lệnh sau

C:\ruby\library> ruby ​​script/generate controller chủ đề


14) Rails Migration là gì?

Rails Migration cho phép Ruby thực hiện các thay đổi đối với lược đồ cơ sở dữ liệu, giúp có thể sử dụng hệ thống kiểm soát phiên bản để đồng bộ hóa mọi thứ với mã thực tế.


15) Liệt kê những gì Rails Migration có thể làm?

Rails Migration có thể thực hiện những điều sau

  • Tạo bảng
  • thả bàn
  • Đổi tên bảng
  • Thêm cột
  • Đổi tên cột
  • Thay đổi cột
  • Xóa cột và vân vân

16) Hãy cho biết lệnh để tạo bản di chuyển là gì?

Để tạo lệnh di chuyển bao gồm

C:\ruby\application>ruby script/tạo tên bảng di chuyển


17) Giải thích khi nào sử dụng phương pháp self.up và self.down?

Khi di chuyển sang phiên bản mới, tự nâng cao phương pháp được sử dụng trong khi tự.xuống phương pháp này được sử dụng để khôi phục lại những thay đổi của tôi nếu cần.


18) Hãy cho biết vai trò của Rails Controller là gì?

Bộ điều khiển Rails là trung tâm logic của ứng dụng. Nó tạo điều kiện thuận lợi cho tương tác giữa người dùng, chế độ xem và mô hình. Nó cũng thực hiện các hoạt động khác như

  • Nó có khả năng định tuyến các yêu cầu bên ngoài đến các hành động bên trong. Nó xử lý URL cực kỳ tốt
  • Nó điều chỉnh các mô-đun trợ giúp, mở rộng khả năng của các mẫu xem mà không làm cồng kềnh mã của chúng
  • Nó điều chỉnh các phiên; mang lại cho người dùng ấn tượng về sự tương tác đang diễn ra với các ứng dụng của chúng tôi

19) Hãy cho biết sự khác biệt giữa “HashWithIndifferent” của Active support và “Hash” của Ruby là gì?

Băm lớp trong thư viện cốt lõi của Ruby trả về giá trị bằng cách sử dụng một chuẩn “= =” so sánh trên các phím. Điều đó có nghĩa là giá trị được lưu trữ cho một biểu tượng không thể lấy được khóa bằng cách sử dụng chuỗi tương đương. Trong khi HashWithIndifferentAccess coi các khóa Biểu tượng và khóa Chuỗi là tương đương.


20) Giải thích Cross-Site Request Forgery (CSRF) là gì và Rails được bảo vệ như thế nào trước CSRF?

CSRF là một hình thức tấn công mà tin tặc gửi yêu cầu trang thay mặt bạn đến một trang web khác, gây ra thiệt hại hoặc tiết lộ dữ liệu nhạy cảm của bạn. Để bảo vệ khỏi các cuộc tấn công CSRF, bạn phải thêm “bảo vệ khỏi sự giả mạo” để của bạn Bộ điều khiển ứng dụng. Điều này sẽ khiến Rails yêu cầu mã thông báo CSRF để xử lý yêu cầu. Mã thông báo CSRF được cung cấp dưới dạng trường ẩn trong mọi biểu mẫu được tạo bằng trình tạo biểu mẫu Rails.


21) Giải thích Mixin trong Rails là gì?

Mixin trong Ruby cung cấp một giải pháp thay thế cho đa kế thừa, sử dụng các mô-đun mixin có thể được nhập vào bên trong lớp khác.


22) Giải thích cách định nghĩa Biến thể hiện, Biến toàn cục và Biến lớp trong Ruby?

  • Biến thể hiện Ruby bắt đầu bằng — @
  • Biến lớp Ruby bắt đầu bằng — @@
  • Biến toàn cục Ruby bắt đầu bằng — $

23) Giải thích cách bạn có thể chạy ứng dụng Rails mà không cần tạo cơ sở dữ liệu?

Bạn có thể thực thi ứng dụng của mình bằng cách bỏ chú thích dòng trong environment.rb

đường dẫn => đường dẫn gốc conf/môi trường.rb

config.frameworks = [ action_web_service, :action_mailer, :active_record]

24) Hãy cho biết sự khác biệt giữa Observer và Callback trong Ruby on Rails là gì?

  • Người quan sát Rails: Observers giống như Callback, nhưng nó được sử dụng khi phương thức không liên kết trực tiếp với vòng đời của đối tượng. Ngoài ra, observer tồn tại lâu hơn và có thể được tách ra hoặc gắn vào bất kỳ lúc nào. Ví dụ, hiển thị các giá trị từ một mô hình trong UI và cập nhật mô hình từ đầu vào của người dùng.
  • Gọi lại Rails: Callback là các phương thức có thể được gọi tại một số thời điểm nhất định trong vòng đời của một đối tượng, ví dụ, nó có thể được gọi khi một đối tượng được xác thực, tạo, cập nhật, xóa. Callback tồn tại trong thời gian ngắn. Ví dụ, chạy một luồng và đưa ra lệnh call-back được gọi khi luồng kết thúc

25) Giải thích rake trong Rails là gì?

Rake là Ruby Make; đây là tiện ích Ruby thay thế tiện ích Unix 'make' và sử dụng 'Rakefile' và '.rake files' để xây dựng danh sách các tác vụ. Trong Rails, Rake được sử dụng cho các tác vụ quản trị thông thường như di chuyển cơ sở dữ liệu thông qua các tập lệnh, tải lược đồ vào cơ sở dữ liệu, v.v.


26) Giải thích cách bạn có thể liệt kê tất cả các tuyến đường cho một ứng dụng?

Để liệt kê tất cả các tuyến đường cho một ứng dụng, bạn có thể viết các tuyến đường rake trong thiết bị đầu cuối.


27) Giải thích sweeper trong Rails là gì?

Trình quét có trách nhiệm hết hạn hoặc chấm dứt bộ nhớ đệm khi đối tượng mô hình thay đổi.


28) Hãy đề cập đến nhật ký cần phải xem để báo cáo lỗi trong Ruby Rails?

Rails sẽ báo cáo lỗi từ Apache trong log/Apache.log và lỗi từ mã Ruby trong log/development.log.


29) Giải thích sự khác biệt giữa giàn giáo động và giàn giáo tĩnh?

Giàn giáo động Giàn giáo tĩnh
  • Nó tự động tạo toàn bộ nội dung và giao diện người dùng khi chạy
  • Nó cho phép tạo ra các phương pháp mới, xóa, chỉnh sửa để sử dụng trong ứng dụng
  • Nó không cần một cơ sở dữ liệu để được đồng bộ hóa
  • Nó yêu cầu nhập thủ công vào lệnh để tạo dữ liệu với các trường của chúng
  • Nó không đòi hỏi bất kỳ thế hệ nào như vậy phải diễn ra
  • Nó yêu cầu cơ sở dữ liệu phải được di chuyển

30) Hãy cho biết chức năng của bộ thu gom rác trong Ruby on Rails là gì?

Các chức năng của bộ thu gom rác trong Ruby on Rails bao gồm

  • Nó cho phép xóa các giá trị con trỏ còn sót lại khi chương trình kết thúc thực thi
  • Nó giải phóng người lập trình khỏi việc theo dõi đối tượng đang được tạo động khi chạy
  • Nó mang lại lợi thế là loại bỏ các đối tượng không thể truy cập khỏi bộ nhớ và cho phép các quy trình khác sử dụng bộ nhớ

31) Hãy cho biết sự khác biệt giữa redirect và render trong Ruby on Rails là gì?

  • Redirect là phương pháp được sử dụng để đưa ra thông báo lỗi trong trường hợp trang không được đưa ra hoặc không tìm thấy trên trình duyệt. Nó yêu cầu trình duyệt xử lý và đưa ra yêu cầu mới.
  • Render là phương pháp được sử dụng để tạo nội dung. Render chỉ hoạt động khi bộ điều khiển được thiết lập đúng với các biến cần được render.

32) Hãy cho biết mục đích của RJ trong Rails là gì?

RJs là một mẫu tạo ra JavaScript được chạy trong khối eval bởi trình duyệt để phản hồi yêu cầu AJAX. Đôi khi nó được sử dụng để xác định JavaScript, Prototype và các trình trợ giúp do Rails cung cấp.


33) Giải thích Polymorphic Association trong Ruby on Rails là gì?

Polymorphic Association cho phép một đối tượng ActiveRecord được kết nối với nhiều đối tượng ActiveRecord. Một ví dụ hoàn hảo về Polymorphic Association là một trang web xã hội nơi người dùng có thể bình luận ở bất kỳ đâu, cho dù đó là video, ảnh, liên kết, cập nhật trạng thái, v.v. Sẽ không khả thi nếu bạn phải tạo một bình luận riêng lẻ như photos_comments, videos_comment, v.v.


34) Hãy cho biết những hạn chế của Ruby on Rails là gì?

Ruby on Rails được thiết kế để tạo ứng dụng web CRUD sử dụng MVC. Điều này có thể khiến Rails không hữu ích đối với các lập trình viên khác. Một số tính năng mà Rails không hỗ trợ bao gồm

  • Khóa ngoại trong cơ sở dữ liệu
  • Liên kết đến nhiều cơ sở dữ liệu cùng một lúc
  • Dịch vụ web xà phòng
  • Kết nối tới nhiều máy chủ cơ sở dữ liệu cùng một lúc

35) Hãy cho biết sự khác biệt giữa lệnh gọi super() và lệnh gọi super là gì?

  • siêu(): Một lệnh gọi đến super() sẽ gọi phương thức cha mà không có bất kỳ đối số nào, như mong đợi. Như thường lệ, việc nêu rõ ràng trong mã của bạn là một điều tốt.
  • siêu gọi: Một lệnh gọi đến super sẽ gọi phương thức cha với cùng các đối số đã được truyền cho phương thức con. Do đó, lỗi sẽ xảy ra nếu các đối số được truyền cho phương thức con không khớp với những gì phương thức cha mong đợi.

36) Giải thích về Dig, Float và Max?

  • Lớp Float được sử dụng bất cứ khi nào hàm thay đổi liên tục.
  • Dig được sử dụng bất cứ khi nào bạn muốn biểu diễn một số thực dưới dạng chữ số thập phân.
  • Max được sử dụng bất cứ khi nào có nhu cầu lớn về Float.

37) Giải thích cách chúng ta có thể định nghĩa biểu thức chính quy Ruby?

Biểu thức chính quy Ruby là một chuỗi ký tự đặc biệt giúp bạn khớp hoặc tìm các chuỗi khác. Một biểu thức chính quy theo nghĩa đen là một mẫu giữa các dấu phân cách hoặc dấu gạch chéo tùy ý theo sau là %r.


38) Giải thích toán tử được định nghĩa là gì?

Toán tử xác định cho biết biểu thức đã truyền có được xác định hay không. Nếu biểu thức được xác định, nó sẽ trả về chuỗi mô tả và nếu không được xác định, nó sẽ trả về giá trị null.


39) Liệt kê một số tính năng của Ruby?

  • Định dạng tự do – Bạn có thể bắt đầu viết từ chương trình từ bất kỳ dòng và cột nào
  • Phân biệt chữ hoa và chữ thường – Chữ hoa và chữ thường được phân biệt rõ ràng
  • Bình luận – Bất cứ điều gì theo sau bởi một không trích dẫn #, cho đến cuối dòng mà nó xuất hiện, bị trình thông dịch bỏ qua
  • Dấu phân cách câu lệnh - Nhiều câu lệnh trên một dòng phải được phân tách bằng dấu chấm phẩy, nhưng không bắt buộc phải có ở cuối dòng.

40) Hãy kể tên các loại biến có sẵn trong Ruby Class?

Các loại biến có sẵn trong Ruby Class là:

  • Biến cục bộ
  • Biến toàn cục
  • Biến lớp
  • Biến thể hiện

41) Giải thích cách khai báo khối trong Ruby?

Trong Ruby, mã trong khối luôn được bao trong dấu ngoặc nhọn ({}). Bạn có thể gọi khối bằng cách sử dụng "câu lệnh yield".


42) Giải thích sự khác biệt giữa lệnh put và lệnh putc?

Không giống như câu lệnh puts, xuất toàn bộ chuỗi ra màn hình. Câu lệnh Putc có thể được sử dụng để xuất từng ký tự một.


43) Giải thích thư viện lớp trong Ruby là gì?

Thư viện lớp Ruby bao gồm nhiều miền khác nhau, chẳng hạn như lập trình luồng, kiểu dữ liệu, nhiều miền khác nhau, v.v. Các lớp này cung cấp khả năng linh hoạt ở mức trừu tượng cao, giúp bạn có khả năng tạo các tập lệnh Ruby mạnh mẽ hữu ích trong nhiều miền vấn đề khác nhau. Các miền sau đây có thư viện lớp liên quan là,

  • Lập trình GUI
  • Lập trình mạng
  • Lập trình CGI
  • Xử lý văn bản

44) Trong Ruby, giải thích về toán tử được định nghĩa như thế nào?

Toán tử defined cho biết biểu thức đã truyền có được định nghĩa hay không. Nếu biểu thức không được định nghĩa, nó sẽ trả về null, và nếu biểu thức được định nghĩa, nó sẽ trả về chuỗi mô tả.


45) Hãy cho biết sự khác biệt về phạm vi của hai biến sau: @@name và @name?

Sự khác biệt về phạm vi của hai biến này là:

  • @@name là một biến lớp
  • @name là một biến thể hiện

46) Hãy cho biết cú pháp của Ruby collect Iterator là gì?

Cú pháp của Ruby collect Iterator collection = collection.collect.


47) Trong mã Ruby, người ta thường thấy rằng người viết mã sử dụng dạng viết tắt của việc sử dụng một biểu thức như mảng.map(&:method_name) thay vì array.map { |element| element.method_name }. Thủ thuật này thực sự hoạt động như thế nào?

Khi một tham số được truyền với “&” ở phía trước. Ruby sẽ gọi to_proc trên tham số đó để cố gắng làm cho nó có thể sử dụng như một khối. Vì vậy, ký hiệu to_Proc sẽ gọi phương thức của tên tương ứng trên bất kỳ thứ gì được truyền vào nó. Do đó giúp mẹo viết tắt của chúng ta hoạt động.


48) Giải thích Interpolation trong Ruby là gì?

Nội suy Ruby là quá trình chèn một chuỗi vào một giá trị thực. Bằng cách đặt một Hash (#) trong {} mở và đóng ngoặc vuông, người ta có thể nội suy một chuỗi vào giá trị thực.


49) Hãy cho biết ký hiệu nào được sử dụng để biểu thị các biến lớp trong Ruby?

Trong Ruby,

  • Hằng số phải bắt đầu bằng chữ in hoa và không được định nghĩa bên trong phương thức
  • Một địa phương phải bắt đầu bằng dấu gạch dưới _ hoặc một chữ cái thường
  • Một biến toàn cục phải bắt đầu bằng dấu $. Một biến toàn cục chưa được khởi tạo có giá trị là “nil” và nó phải nâng cao một cảnh báo. Nó có thể được tham chiếu ở bất cứ đâu trong chương trình.
  • Một biến lớp phải bắt đầu bằng double @@ và phải được khởi tạo trước khi được sử dụng trong định nghĩa phương thức

50) Hãy cho biết sự khác biệt giữa Procs và Blocks là gì?

Sự khác biệt giữa Procs và Blocks,

  • Block chỉ là một phần cú pháp của một phương thức trong khi proc có các đặc điểm của một khối
  • Procs là đối tượng, khối không phải là
  • Tối đa một khối có thể xuất hiện trong danh sách đối số
  • Chỉ có khối không thể được lưu trữ vào một biến trong khi Proc có thể

51) Hãy cho biết sự khác biệt giữa dấu nháy đơn và dấu nháy kép?

Chuỗi được đặt trong dấu ngoặc đơn không xử lý mã thoát ASCII và không thực hiện nội suy chuỗi.


52) Hãy cho biết sự khác biệt giữa gem và plugin trong Ruby là gì?

  • Đá quý: Gem chỉ là mã ruby. Nó được cài đặt trên một máy và có sẵn cho tất cả các ứng dụng ruby ​​chạy trên máy đó.
  • Cắm vào: Plugin cũng là mã ruby, nhưng nó được cài đặt trong thư mục ứng dụng và chỉ khả dụng cho ứng dụng cụ thể đó.

53) Sự khác biệt giữa extend và include là gì?

“include” khiến các phương thức của mô-đun có sẵn cho phiên bản của lớp, trong khi “extend” khiến các phương thức này có sẵn cho chính lớp đó.

Những câu hỏi phỏng vấn này cũng sẽ giúp ích cho bài thi viva(orals) của bạn

Chia sẻ

14 Comments

  1. hình đại diện Hasanuzzaman Sumon nói:

    Yield không phải là hàm. Từ khóa ruby ​​được sử dụng để thực thi khối.

    1. hình đại diện Terry Ray nói:

      Cụ thể, yield sẽ chuyển quyền điều khiển luồng (nhiều khả năng là Main.thread) cho khối được truyền vào một cách rõ ràng dưới dạng tham số tức là def my_method(&my_block) Hoặc một khối có thể được truyền ngầm định như sau

      my_class.my_method làm
      # mã trong khối này sẽ được chuyển đến bên trong phương thức gọi
      cuối

  2. Jorge Armando nói:

    ở câu hỏi số 6, trong Ruby, không có lớp “Boolean”, do đó không có “kiểu Boolean”. Chỉ có TrueClass và FalseClass.

  3. hình đại diện Terry Ray nói:

    thực ra Thread.main… lỗi của tôi :)

  4. hình đại diện thử nghiệm nói:

    Ruby không lấy cảm hứng từ Python, nó lấy cảm hứng từ những ngôn ngữ sau (Perl, Smalltalk, Eiffel, Ada, BASIC và Lisp)

  5. Cái nhìn thoáng qua về ruby ​​và rails

Bình luận

Chúng tôi sẽ không công khai email của bạn. Các ô đánh dấu * là bắt buộc *