Rack

Để hiểu giải pháp Rails diễn giải params, các bạn sẽ bắt buộc hiểu gần như điều cơ bản của Raông chồng với cách Rails tương tác cùng với nó. Theo document của rack:

Raông xã provides a minimal interface between web servers that support Ruby & Ruby frameworks.To use Rack, provide an “app”: an object that responds to lớn the điện thoại tư vấn method, taking the environment hash as a parameter, và returning an Array with three elements:

The HTTP.. response codeA Hash of headersThe response body, which must respond lớn each

Về cơ bản thì Rack vẫn nằm trong lòng website hệ thống và vận dụng Rails của bạn.

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

Nó nhấn request tự web server, gửi nó thành vươn lên là env (Ruby hash) nhưng Rails rất có thể hiểuRails đem biến env kia, triển khai phần nhiều gì nó buộc phải cùng với nó với trả về một mảng dễ dàng và đơn giản quay lại Rack cùng với HTTP.. response code, headers và response body.Rack đem mảng kia, đưa nó trở về thành bình luận HTTP. tương thích với gửi nó mang đến trình chu đáo để hiển thị.!

*

“params” là gì ?

Để hiểu rõ rộng về vấn đề params bắt đầu từ đâu, họ cần nắm rõ hơn về nó. Có yêu cầu là 1 Hash ? Method ? Thứ gì không giống ?

Cách tốt nhất nhằm đưa ra vấn đề này là đặt binding.pry vào một controller action cùng cố gắng tò mò xem nó có các chiếc gì.

Hãy lấy 1 VD:

*

Sau khi submit 1 thử nghiệm form

*

Tiếp tục kiếm tìm hiểu:

params là 1 trong những method của lớp ActionController::StrongParameter.Mặc mặc dù params được trình bày nlỗi là một trong những hash, nhưng mà thữ ra nó là một trong instance của lớp ActionControll::Paramameter.

*

Nếu chúng ta không thân thuộc với ActionControll::StrongParameter, thì đây là lớp cấp mang đến chúng ta nhiều bảo mật rộng cùng dùng để hạn chế so với tđam mê số nguồn vào. Nếu chúng ta đã từng sử dụng cú pháp này trước đó, bạn có thể cảm ơn ActionContoder::StrongParameter:

params.require(:post).permit!Bên trong source code ActionControll::StrongParameter, các bạn sẽ tra cứu thấy params trong đó.

*

Nhỏng các bạn thấy, params là 1 getter method của lớp ActionContoder::StrongParameter với nó trả về biến instance
_params, là 1 trong instance của lớp ActionContoder::Paramameter.

Thoạt chú ý, điều này còn có vẻ không có ích những, mà lại điều đó giải thích tại sao params bao gồm sẵn cho bọn họ trong controller của bọn họ. Kiểm tra console của các bạn sẽ cho chính mình biết nguyên nhân vì sao.

*

Chúng ta gồm quyền truy vấn vào params vị controller của họ là descendants của ActionContoder::StrongParameter và thừa kế toàn bộ các instance methods của nó!

Trong lúc vấn đề này phân tích và lý giải bí hiểm params có mặt làm việc khắp nơi, thì nó không lý giải làm cho cố nào nó để sở hữu được nó. Nếu các bạn như tôi, bạn có nhu cầu biết toàn cục mẩu chuyện. lấy một ví dụ, request.parameters là gì? Nó tới từ đâu?

params tới từ đâu

Sau khi mày mò nhiều hơn thế về Rails, tôi đã thấy ActionControll::Metal. Về cơ bản, ActionControll::Metal là một trong phiên bạn dạng form xương của ActionControll::Base.

Xem thêm: Pháp Sư Nhật Bản? Abe No Seimei Là Ai Seimei/Khác

Nếu các bạn chú ý vào source code của chính nó, các bạn sẽ tìm thấy một trong những tài liệu liên quan đến request tương tự như tập hòa hợp các methods tương quan mang lại params.

*

Tại thời đặc điểm này tôi bắt buộc đề cập rằng, để đi sâu hơn vào Rails, tôi sẽ bao gồm một trình ghi staông xã trace.

*

Lý vì tôi đề cập đến vấn đề đó là bởi vì bạn sẽ thấy toàn bộ các methods được call Khi Rails nhận được một biến đổi env từ Rack - với gồm RẤT NHIỀU. Nếu bạn có nhu cầu xem mọi sản phẩm công nghệ xảy ra ẩn dưới hậu ngôi trường, hãy coi cái này.

*

Mặc cho dù nhật ký kết này khôn cùng ấn tượng cùng lạ đời, tuy nhiên chỉ tất cả một vài ba cái mà bọn họ cần phải lo ngại về paramsvới ActionContoder::Metal.

*

Các chiếc gồm liên quan được sơn greed color lam

*

ActionController::Metal#dispatch

*

ActionController::Metal::action

Điều cơ mà stachồng trace này nói là sau thời điểm Rails được khởi chế tạo với biến đổi env, biến đó được truyền qua Rails. Tại một trong những điểm, nó hướng tới class method ActionControll::Metal::action. Bên trong thủ tục này, ActionContoder::Metal khởi tạo nên một instance mới của chính nó và Điện thoại tư vấn #dispatch, nó đặt
_request là 1 instance new của lớp ActionDispatch:: Request.

ActionDispatch::Request là giao diện Rails áp dụng nhằm can dự với HTTPhường. request (env) gồm bắt đầu từ bỏ Raông chồng. Một trong những cách làm nhưng mà API này hỗ trợ là #parameters.

Bài viết liên quan

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *