Rails Param Là Gì – Rails Params: Chúng Đến Từ Đâu

Rack

Để hiểu cách Rails diễn giải params, bạn sẽ phải hiểu những điều cơ bản của Rack và cách Rails tương tác với nó. Theo document của rack :Rack provides a minimal interface between web servers that tư vấn Ruby and Ruby frameworks. To use Rack, provide an “ app ” : an object that responds to the call method, taking the environment hash as a parameter, and returning an Array with three elements :The HTTP response codeA Hash of headersThe response body, which must respond to eachThe HTTP response codeA Hash of headersThe response body toàn thân, which must respond to each

Về cơ bản thì Rack sẽ nằm giữa web server và ứng dụng Rails của bạn.

Bạn đang xem: Param là gì

Nó nhận request từ web server, chuyển nó thành biến env (Ruby hash) mà Rails có thể hiểuRails lấy biến env đó, thực hiện những gì nó cần với nó và trả về một mảng đơn giản trở lại Rack với HTTP response code, headers và response body.Rack lấy mảng đó, chuyển nó trở lại thành phản hồi HTTP thích hợp và đưa nó đến trình duyệt để hiển thị.!Nó nhận request từ web server, chuyển nó thành biến env ( Ruby hash ) mà Rails hoàn toàn có thể hiểuRails lấy biến env đó, triển khai những gì nó cần với nó và trả về một mảng đơn thuần trở lại Rack với HTTP response code, headers và response body toàn thân. Rack lấy mảng đó, chuyển nó trở lại thành phản hồi HTTP thích hợp và đưa nó đến trình duyệt để hiển thị. !*

“params” là gì ?

Để hiểu rõ hơn về việc params bắt nguồn từ đâu, tất cả chúng ta cần hiểu rõ hơn về nó. Có phải là một Hash ? Method ? Thứ gì khác ?Cách tốt nhất để tìm ra điều này là đặt binding.pry vào một controller action và cố gắng nỗ lực khám phá xem nó có những cái gì .Hãy lấy 1 VD :*Sau khi submit 1 test form*Tiếp tục khám phá :params là một method của lớp ActionController::StrongParameter.Mặc dù params được thể hiện như là một hash, nhưng thữ ra nó là một instance của lớp ActionControll::Paramameter.params là một method của lớp ActionController :: StrongParameter. Mặc dù params được biểu lộ như thể một hash, nhưng thữ ra nó là một instance của lớp ActionControll :: Paramameter .*Nếu bạn không quen thuộc với ActionControll :: StrongParameter, thì đây là lớp cấp cho tất cả chúng ta nhiều bảo mật thông tin hơn và dùng để hạn chế so với tham số nguồn vào. Nếu bạn đã từng sử dụng cú pháp này trước đây, bạn hoàn toàn có thể cảm ơn ActionContoder :: StrongParameter :params.require ( : post ). permit ! Bên trong source code ActionControll :: StrongParameter, bạn sẽ tìm thấy params trong đó .*

Như bạn thấy, params là một getter method của lớp ActionContoder::StrongParameter và nó trả về biến instance
_params, là một instance của lớp ActionContoder::Paramameter.

Thoạt nhìn, điều này có vẻ không có ích nhiều, nhưng điều này giải thích tại sao params có sẵn cho chúng ta trong controller của chúng ta. Kiểm tra console của bạn sẽ cho bạn biết lý do tại sao.

*Chúng ta có quyền truy vấn vào params vì controller của tất cả chúng ta là descendants của ActionContoder :: StrongParameter và thừa kế toàn bộ những instance methods của nó !Trong khi điều này lý giải huyền bí params xuất hiện ở khắp nơi, thì nó không lý giải làm thế nào nó để có được nó. Nếu bạn như tôi, bạn muốn biết hàng loạt câu truyện. Ví dụ, request.parameters là gì ? Nó đến từ đâu ?

params đến từ đâu

Sau khi tìm hiểu nhiều hơn về Rails, tôi đã thấy ActionControll::Metal. Về cơ bản, ActionControll::Metal là một phiên bản khung xương của ActionControll::Base.

Xem thêm: Chiến Lược Dòng Sản Phẩm Là Gì ? Kế Hoạch Marketing Cho Dòng Sản Phẩm

Nếu bạn nhìn vào source code của nó, bạn sẽ tìm thấy một số ít tài liệu tương quan đến request cũng như tập hợp những methods tương quan đến params .*Tại thời gian này tôi nên đề cập rằng, để đi sâu hơn vào Rails, tôi đã gồm có một trình ghi stack trace .*Lý do tôi đề cập đến điều này là chính do bạn sẽ thấy toàn bộ những methods được gọi khi Rails nhận được một biến env từ Rack – và có RẤT NHIỀU. Nếu bạn muốn xem mọi thứ xảy ra đằng sau hậu trường, hãy xem cái này .*Mặc dù nhật ký này rất ấn tượng và quái đản, nhưng chỉ có một vài dòng mà tất cả chúng ta cần phải lo ngại về paramsvà ActionContoder :: Metal .*Các dòng có tương quan được tô màu xanh lam*ActionController :: Metal # dispatch

*ActionController :: Metal :: action

Điều mà stack trace này nói là sau khi Rails được khởi tạo với biến env, biến đó được truyền qua Rails. Tại một số điểm, nó hướng tới class method ActionControll::Metal::action. Bên trong phương thức này, ActionContoder::Metal khởi tạo một instance mới của chính nó và gọi #dispatch, nó đặt
_request là một instance mới của lớp ActionDispatch:: Request.

Xem thêm: Learning Curve Là Gì Trong Tiếng Việt? Learning Curve Nghĩa Là Gì Trong Tiếng Việt

ActionDispatch :: Request là giao diện Rails sử dụng để tương tác với HTTP request ( env ) có nguồn gốc từ Rack. Một trong những phương pháp mà API này cung ứng là # parameters .