Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Ruby

พารามิเตอร์ Rails คืออะไร &วิธีใช้งานอย่างถูกต้อง

มาพูดถึงพารามิเตอร์ Rails กันเถอะ!

ทำไมจึงมีประโยชน์

ผู้ใช้สามารถส่งข้อมูลไปยังเว็บแอปพลิเคชันของคุณได้สามวิธี

สามวิธีนี้คือ :

  1. การใช้พารามิเตอร์การค้นหา ("example.com/?q=bacon" )
  2. การส่งแบบฟอร์ม ("/users/sign_in" )
  3. ภายใน URL เอง ("/books/1" )

คุณเข้าถึงข้อมูลนี้จาก Rails ได้อย่างไร

ด้วย params .

ภายในการกระทำของผู้ควบคุม คุณสามารถเรียก params เพื่อ เข้าถึงแบบฟอร์ม &ข้อมูลการสืบค้น URL .

params . คืออะไร ใช่ไหม

เป็นวิธีการที่ส่งคืน ActionController::Parameters วัตถุ ในทางปฏิบัติมันมีลักษณะเหมือนแฮชมาก

ตอนนี้

สมมติว่าคุณต้องการอ่านค่าหนึ่งค่าจาก params . นี้ แฮช.

ตามนี้ :

params[:id]

คุณจะได้รับค่าหากมีอยู่

หรือ nil หากไม่เป็นเช่นนั้น

ข้อควรรู้เล็กน้อย :

  • ถ้าเว้นช่องว่างไว้ คุณจะได้สตริงว่าง
  • ค่าทั้งหมดภายใน params เป็นสตริง แม้ว่าจะส่งเป็นจำนวนเต็มแล้ว

มาดูพารามิเตอร์ Rails ให้ลึกกว่านี้หน่อยดีกว่า เพราะถ้าคุณไม่เข้าใจดี อาจทำให้เกิดความสับสนและปัญหาแปลก ๆ ได้!

Rails Conventions:Form Fields &Params

ฟิลด์แบบฟอร์ม &พารามิเตอร์ URL จับคู่กับ params อย่างไร กุญแจ?

ฉันมีตัวอย่างให้คุณ

ที่นี่ :


นี่คือแบบฟอร์มการค้นหาง่ายๆ ที่จะส่งคำขอ POST ไปที่ /search .

ด้วยเหตุนี้ คุณจะได้ params วัตถุ:

{ "q"=>"", "controller"=>"books", "action"=>"search" }

“q” นี้คืออะไร?

เป็น แอตทริบิวต์ชื่อของช่องป้อนข้อมูลในรูปแบบ HTML .

ชื่อจะเป็นอะไรก็ได้ที่คุณต้องการ

หากคุณสร้างแบบฟอร์มโดยใช้ form_for วิธีช่วยเหลือ ชื่อจะถูกสร้างขึ้นโดยอัตโนมัติสำหรับคุณและเป็นไปตามรูปแบบเฉพาะ

นี่คือตัวอย่าง :

# form_for(@book) with a few fields generates something like this


book[title] .นี้ รูปแบบในช่องชื่อจะสร้าง params แฮชที่ค่าจะถูกซ้อนกัน

ให้ฉันอธิบายด้วยตัวอย่าง :

{
  "book"=>
    {
      "title"=>"",
      "author"=>"",
      "cover"=>"",
      "language"=>"English"
    }
}

ผู้ใช้ส่งแบบฟอร์มเปล่าและนี่คือสิ่งที่คุณได้รับ

จากคอนโทรลเลอร์ของคุณ…

คุณเข้าถึงข้อมูลเช่นนี้ :

params[:book][:language]
# "English"

params[:book][:author]
# ""

โปรดจำไว้ว่าสิ่งนี้ทำงานเหมือนแฮช แต่ต่างจากแฮชทั่วไป โดยจะยอมรับทั้งสัญลักษณ์และสตริงเป็นคีย์ที่เทียบเท่ากัน

แปลว่า params["book"] &params[:book] เหมือนกัน

การเปิดใช้งานเส้นทางของคุณเพื่อยอมรับพารามิเตอร์

นอกจากพารามิเตอร์การสืบค้นแล้ว คุณยังสามารถเปิดใช้งานพารามิเตอร์รูปแบบ REST ได้อีกด้วย

ใน Rails เราเรียกสิ่งนี้ว่า “ส่วนไดนามิก”

มาดูตัวอย่างกัน

ถ้าคุณมีเส้นทางเช่น :

get 'books/:id', to: 'books#show'

หรือ :

resources :books

คุณจะสามารถใช้ URL แบบนี้ได้ :

/books/1

จากนั้นคุณสามารถเข้าถึง 1 . นี้ ซึ่งเป็น id ใน books/:id .

ด้วย params .

ถูกใจสิ่งนี้ :

params[:id]

ซึ่งจะช่วยคุณค้นหาแหล่งข้อมูลเฉพาะที่ผู้ใช้กำลังมองหา

Book.find(params[:id])

ทำความเข้าใจพารามิเตอร์ที่แข็งแกร่ง

ถัดไป:

หากคุณพยายามบันทึกวัตถุลงในฐานข้อมูลของคุณ แต่ดูเหมือนว่าจะไม่ทำงาน

ดูบันทึกเซิร์ฟเวอร์ Rails ของคุณ

คุณอาจเห็นสิ่งนี้ :

Unpermitted parameter: :language

สิ่งนี้หมายความว่าอย่างไร

Rails เปิดตัวระบบ “พารามิเตอร์ที่แข็งแกร่ง” กลับมาใน Rails 4 เป็นฟีเจอร์ความปลอดภัย

บังคับให้คุณ อนุญาตพิเศษแอตทริบิวต์ ที่สามารถบันทึกได้

ซึ่งป้องกันปัญหาที่เรียกว่า "การกำหนดจำนวนมาก" ซึ่งอนุญาตให้ผู้ใช้ที่เป็นอันตรายตั้งค่า admin = true หรือตั้งค่าช่องอื่นๆ ที่ปกติจะไม่สามารถเข้าถึงได้

คุณสามารถอนุญาตพิเศษฟิลด์เช่นนี้ :

def book_params
  params.require(:book).permit(:title, :author, :cover, :language)
end

วิธีนี้ทำงานอย่างไร

  • The require เมธอดจะมองหา params[:book] และแจ้งข้อผิดพลาดหากไม่มี
  • การ permit method คือรายการแอตทริบิวต์ที่อนุญาต (แต่ไม่บังคับ)

เป็นผลให้คุณได้รับ params ใหม่ แฮชกับแอตทริบิวต์เหล่านี้ แต่ตอนนี้ชัดเจนแล้วที่จะบันทึกลงในฐานข้อมูล

ตัวอย่าง :

Book.create(book_params)

ขอให้สังเกตว่าแฮช Ruby ปกติจะข้ามระบบความปลอดภัยนี้

ตัวอย่าง :

Book.create(title: "", author: "", cover: "")

สิ่งนี้น่าจะใช้ได้หากชื่อแอตทริบิวต์ (เช่น author ) เป็นฮาร์ดโค้ด

สรุป

คุณได้เรียนรู้เกี่ยวกับพารามิเตอร์ Rails วิธีทำงาน และวิธีการใช้อย่างถูกต้องในโครงการ Rails ของคุณ!

ตอนนี้ถึงตาคุณที่จะฝึกฝน จดบันทึก ทบทวน 🙂

ขอบคุณสำหรับการอ่าน