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

สุดยอดคู่มือการแสดงผล Rails

เรนเดอร์อะไรใน Rails?

การแสดงผลเป็นเป้าหมายสูงสุดของแอปพลิเคชัน Ruby on Rails ของคุณ คุณแสดงมุมมอง โดยปกติ .html.erb ไฟล์ซึ่งมีรหัส HMTL และ Ruby ผสมกัน

มุมมองคือสิ่งที่ผู้ใช้เห็น .

เป็นผลจากการทำงานทั้งหมดที่แอป Rails ของคุณต้องทำ มุมมองรวมตรรกะ ข้อมูล และดูเทมเพลตเพื่อให้บริการตามคำขอของผู้ใช้

แม้แต่การตอบกลับ JSON ก็ถือเป็นมุมมองได้

นั่นคือเหตุผลที่เรียนรู้ทุกสิ่งที่คุณทำได้ เกี่ยวกับระบบการแสดงผลใน Rails นั้น สำคัญ ถ้าคุณไม่ต้องการให้งานของคุณสูญเปล่า

การแสดงผลใน Rails สามารถสร้างพฤติกรรมที่น่าประหลาดใจได้ ยิ่งคุณรู้มากขึ้นเท่านั้น

มาเริ่มกันที่พื้นฐานกันเลย!

พื้นฐานของการแสดงภาพ

โดยค่าเริ่มต้น คุณไม่จำเป็นต้องบอกให้ Rails แสดงผลใดๆ และมุมมองจะยังคงใช้งานได้ตราบใดที่ตั้งค่าอย่างอื่นอย่างถูกต้อง

นี่เป็นส่วนหนึ่งของ “Convention over Configuration”

มันทำงานอย่างไร

Rails ตั้งสมมติฐานซึ่งคุณอาจไม่รู้

ช่วยให้คุณประหยัดเวลาในการทำงาน

แต่หากไม่รู้ว่าเกิดอะไรขึ้น อาจรู้สึกเหมือนมีเวทมนตร์

นั่นคือที่ที่คุณสร้างปัญหาได้!

ในกรณีนี้ ข้อสันนิษฐานที่ Rails สร้างขึ้นคือคุณต้องการสร้างเทมเพลตที่มีชื่อเดียวกับการดำเนินการของคอนโทรลเลอร์ที่จัดการคำขอ

ดังนั้นหากคุณเรียก BooksController#index … Rails แสดง books/index.erb .

ตอนนี้ :

คุณสามารถควบคุมการเรนเดอร์นี้ได้มากขึ้น

ซึ่งจะทำให้คุณสามารถแสดงมุมมองที่แตกต่างจากค่าเริ่มต้นได้

ตามนี้ :

class BooksController < ApplicationController
  def index
    render :listing
  end
end

สิ่งนี้ทำให้ books/listing.erb (หรือ .haml หากคุณกำลังใช้มุมมอง HAML)

คุณสามารถใช้สตริงแทนสัญลักษณ์ได้

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

render 'shared/buttons'

Rails จะแสดง shared/buttons.erb .

สิ่งหนึ่งที่คุณต้องรู้

การแสดงผลมุมมองที่เกี่ยวข้องกับการกระทำอื่นจะไม่เรียกใช้การกระทำนั้น

กล่าวอีกนัยหนึ่งเรียก render :index ภายใน create จะไม่เรียกใช้ index วิธีการ

เหตุใดจึงสำคัญ

เนื่องจากจะไม่มีการตั้งค่าตัวแปรอินสแตนซ์สำหรับมุมมองนั้น!

คุณต้องตั้งค่าเอง

ตัวอย่าง :

def index
  @users = User.all
end

# Missing `@users` here will result in an error or an empty index view
# You can use `redirect_to` instead, in that case `index` will run
def create
  render :index
end

มีการเรนเดอร์มากกว่านี้อีกมาก

ไปต่อกันเถอะ!

การแสดงผลประเภทต่างๆ

นอกจากการแสดงเทมเพลตแล้ว คุณยังมีตัวเลือกอื่นๆ

คุณทำได้ :

  • แสดงสตริง HTML
  • แสดงสตริงข้อความธรรมดา
  • แสดงผล JSON

การแสดงสตริงจะมีประโยชน์ในระหว่างการพัฒนาเพื่อแสดงข้อความแสดงข้อผิดพลาดหากคุณไม่มีเทมเพลตที่เหมาะสมในการจัดการข้อผิดพลาด

หรือหากคุณยังไม่พร้อมที่จะเขียนมุมมองสำหรับการดำเนินการของผู้ควบคุมโดยเฉพาะ

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

if @user
  render :show
else
  render plain: "User not found."
end

การแสดงผล JSON สามารถใช้สร้าง API แบบง่ายได้โดยตรง ซึ่งไม่ใช่วิธีที่ดีที่สุดแต่จะช่วยให้คุณเริ่มต้นได้

ตัวอย่าง :

render json: @user

ฉันไม่ได้ใช้การเรนเดอร์ HTML แต่ถ้าคุณมีประโยชน์ให้บอกฉัน!

วิธีการแสดงบางส่วน

การแสดงผลเป็นมากกว่าตัวควบคุม

คุณยังสามารถแสดงมุมมองภายในมุมมอง .

เราเรียกว่าบางส่วน

ทำไมคุณถึงอยากทำอย่างนั้น

โค้ดสะอาดขึ้น &โค้ดใช้ซ้ำ

หากคุณใช้แบบฟอร์มเดียวกันใน 3 หน้าที่แตกต่างกัน อาจเป็นความคิดที่ดีที่จะแยกออกเป็นบางส่วน .

ตอนนี้เมื่อคุณต้องการทำการเปลี่ยนแปลง คุณต้องทำในที่เดียวเท่านั้น

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

<%= render :form %>

เพื่อให้ใช้งานได้ คุณต้องตั้งชื่อไฟล์มุมมองที่ขึ้นต้นด้วยขีดล่าง เช่น _form.erb แต่เมื่อคุณเรียก render คุณไม่จำเป็นต้องมีขีดล่าง

คุณจะสามารถเข้าถึงตัวแปรอินสแตนซ์ จากบางส่วน...

แล้วตัวแปรท้องถิ่นล่ะ

คุณทำได้ :

<%= render :form, message: "Apples Are Good" %>

ซึ่งจะทำให้คุณเข้าถึงmessage เป็นตัวแปรท้องถิ่นในส่วนของคุณ

ถัดไป :

คุณจะได้เรียนรู้วิธีแสดงหลายสิ่งด้วย render . เดียว โทรเลย!

วิธีการแสดงคอลเล็กชัน

บางส่วนช่วยให้คุณแสดงคอลเล็กชันโดยไม่มีการวนซ้ำ

สมมติว่าคุณกำลังแสดงผล @books .

คุณทำได้ :

<%= render @books %>

สิ่งนี้จะได้ผลถ้าคุณมี _book.erb บางส่วน &ใช้ book เป็นตัวแปรของคุณภายในเทมเพลตนั้น

ตัวอย่าง :

# app/views/books/_book.erb


  <%= image_tag(book.cover) %>

  
    

<%= book.title %>

<%= book.author %> <%= link_to "Read Book", book %>

หากคุณต้องการหมายเลขหนังสือปัจจุบัน (สำหรับคลาส CSS ของคุณ) คุณสามารถใช้ book_counter .

ที่ไหน book_ เป็นชื่อรุ่นของคุณ

ฉันคิดว่าการแสดงคอลเลกชันเป็นหนึ่งในคุณสมบัติ Rails ที่ฉันโปรดปราน!

ทำความเข้าใจเค้าโครง Rails

เมื่อคุณสร้างแอป Rails ใหม่ แอปจะมาพร้อมกับโฟลเดอร์ "เลย์เอาต์" ใต้โฟลเดอร์มุมมอง

คุณจะพบ application.html.erb ไฟล์.

นั่นคือเค้าโครงเริ่มต้น!

เลย์เอาต์คืออะไร

เลย์เอาต์ช่วยให้คุณทำให้ไซต์ของคุณมีรูปลักษณ์ที่สอดคล้องกัน

มัน :

  • เมนู
  • ส่วนท้าย
  • กำลังโหลดไฟล์ CSS &Javascript...

ส่วนใหญ่แล้วเลย์เอาต์เริ่มต้นก็ใช้ได้

แต่ถ้าคุณต้องการรูปแบบที่แตกต่างกันสำหรับหน้าใดหน้าหนึ่ง

คุณสามารถใช้ layout ตัวเลือก

ตัวอย่าง :

render :index, layout: 'admin'

คุณสามารถปิดการใช้งานเลย์เอาต์ :

render :index, layout: false

และคุณสามารถกำหนดเลย์เอาต์ที่ระดับคอนโทรลเลอร์ได้

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

class AdminsController < ApplicationController
  layout 'admin'
end

การแสดงผลไม่สิ้นสุดการกระทำ

จุดที่ทำให้เกิดความสับสนอย่างหนึ่งคือการคิดว่าการเรนเดอร์ (และการเปลี่ยนเส้นทาง) ภายในการทำงานของคอนโทรลเลอร์จะหยุดรันโค้ดใดๆ หลังจากนั้น

คุณสามารถติดต่อกับสิ่งนี้ได้หากคุณโทร render หลายครั้ง

ตัวอย่าง :

def create
  if yellow_fruit?
    render :bananas
  end

  render :apples
end

ซึ่งจะส่งผลให้เกิดข้อผิดพลาดเนื่องจาก render :apples ทำงานเสมอและคุณไม่สามารถแสดงผลสองครั้งในการกระทำของตัวควบคุมเดียวกันได้

นี่คือวิธีแก้ปัญหา :

def create
  if yellow_fruit?
    render :bananas
  else
    render :apples
  end
end

อีกทางเลือกหนึ่งคือการใช้ return คีย์เวิร์ดหลัง render แต่เพื่อความชัดเจน เป็นการดีที่สุดที่จะหลีกเลี่ยง return กลางของวิธีการ คำสั่งเมื่อเป็นไปได้

สรุป

คุณได้เรียนรู้เกี่ยวกับหัวข้อสำคัญทั้งหมดของการเรนเดอร์ใน Ruby on Rails แล้ว

การแสดงผลช่วยให้คุณสามารถส่งคืนเนื้อหาไปยังผู้ใช้แอปพลิเคชันของคุณ &เป็นหนึ่งในขั้นตอนสุดท้ายภายในการดำเนินการควบคุมของคุณ การทำความเข้าใจการเรนเดอร์ช่วยให้คุณเขียนแอปพลิเคชัน Rails ได้ดีขึ้น

ตอนนี้ถึงตาคุณแล้ว เปิดโปรแกรมแก้ไขและฝึกทักษะการเขียนโค้ด

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