Computer >> Máy Tính >  >> Lập trình >> Ruby

Hướng dẫn cơ bản để kết xuất đường ray

Điều gì đang hiển thị trong Rails?

Kết xuất là mục tiêu cuối cùng của ứng dụng Ruby on Rails của bạn. Bạn hiển thị một dạng xem, thường là .html.erb các tệp chứa hỗn hợp mã HMTL &Ruby.

Chế độ xem là những gì người dùng nhìn thấy .

Đó là kết quả của tất cả công việc mà ứng dụng Rails của bạn phải làm. Chế độ xem kết hợp logic, dữ liệu và mẫu chế độ xem để phục vụ yêu cầu của người dùng.

Ngay cả việc trả về một phản hồi JSON cũng có thể được coi là một lượt xem.

Đó là lý do tại sao học mọi thứ bạn có thể về hệ thống kết xuất trong Rails là quan trọng nếu bạn không muốn tất cả công việc của mình bị lãng phí.

Kết xuất trong Rails có thể tạo ra một số hành vi đáng ngạc nhiên. Vì vậy, bạn càng biết nhiều càng tốt.

Hãy bắt đầu với những điều cơ bản!

Khái niệm cơ bản về kết xuất chế độ xem

Theo mặc định, bạn không phải yêu cầu Rails kết xuất bất kỳ thứ gì và các chế độ xem sẽ vẫn hoạt động miễn là mọi thứ khác được thiết lập chính xác.

Đây là một phần của "Quy ước về cấu hình".

Điều đó hoạt động như thế nào?

Rails đưa ra các giả định mà bạn có thể không biết.

Nó giúp bạn tiết kiệm công việc.

Nhưng nếu bạn không biết chuyện gì đang xảy ra, nó có thể giống như một phép thuật.

Đó là nơi bạn có thể gặp rắc rối!

Trong trường hợp cụ thể này, giả định mà Rails đưa ra là bạn muốn hiển thị một mẫu có cùng tên với hành động của trình điều khiển đang xử lý yêu cầu.

Vì vậy, nếu bạn gọi BooksController#index … Rails kết xuất books/index.erb .

Bây giờ :

Bạn có thể kiểm soát nhiều hơn việc hiển thị này.

Điều này cho phép bạn hiển thị một chế độ xem khác với chế độ mặc định.

Đây là cách thực hiện :

class BooksController < ApplicationController
  def index
    render :listing
  end
end

Điều này hiển thị books/listing.erb (hoặc .haml nếu bạn đang sử dụng chế độ xem HAML).

Bạn có thể sử dụng một chuỗi thay vì một ký hiệu.

Như thế này :

render 'shared/buttons'

Rails sẽ hiển thị shared/buttons.erb .

Một điều bạn cần biết

Việc hiển thị một chế độ xem được liên kết với một hành động khác sẽ không chạy hành động đó.

Nói cách khác, gọi render :index bên trong create sẽ không chạy index phương pháp.

Tại sao điều đó lại quan trọng?

Bởi vì các biến phiên bản cho chế độ xem đó sẽ không được đặt!

Bạn cần tự đặt chúng.

Ví dụ :

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

Còn nhiều thứ để kết xuất hơn thế này.

Hãy tiếp tục!

Các kiểu kết xuất khác nhau

Bên cạnh việc hiển thị một mẫu, bạn có các tùy chọn khác.

Bạn có thể :

  • Hiển thị một chuỗi HTML
  • Hiển thị một chuỗi văn bản thuần túy
  • Kết xuất JSON

Việc hiển thị một chuỗi có thể hữu ích trong quá trình phát triển để hiển thị một số loại thông báo lỗi nếu bạn không có mẫu thích hợp để xử lý lỗi.

Hoặc nếu bạn chưa sẵn sàng viết chế độ xem của mình cho một hành động trình điều khiển cụ thể.

Đây là một ví dụ :

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

Kết xuất JSON trực tiếp có thể được sử dụng để xây dựng một API đơn giản, đây không phải là cách tiếp cận tốt nhất nhưng nó có thể giúp bạn bắt đầu.

Ví dụ :

render json: @user

Tôi chưa sử dụng HTML kết xuất, nhưng nếu bạn sử dụng tốt nó, hãy cho tôi biết!

Cách kết xuất các phân vùng

Kết xuất vượt ra ngoài bộ điều khiển.

Bạn cũng có thể hiển thị chế độ xem trong chế độ xem .

Chúng tôi gọi đó là một phần.

Tại sao bạn muốn làm điều đó?

Mã sạch hơn và sử dụng lại mã.

Nếu bạn đang sử dụng cùng một biểu mẫu trên 3 trang khác nhau, bạn nên trích xuất nó thành một phần .

Giờ đây, khi bạn muốn thực hiện các thay đổi, bạn chỉ phải thực hiện ở một nơi.

Đây là một ví dụ :

<%= render :form %>

Để điều này hoạt động, bạn cần đặt tên tệp dạng xem của mình bắt đầu bằng dấu gạch dưới, như _form.erb , nhưng khi bạn gọi render bạn không cần dấu gạch dưới.

Bạn sẽ có thể truy cập biến phiên bản từ các bên ...

Nhưng còn các biến cục bộ thì sao?

Bạn có thể làm điều này :

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

Điều này cấp cho bạn quyền truy cập vào message như một biến cục bộ trong một phần của bạn.

Tiếp theo :

Bạn sẽ học cách kết xuất nhiều thứ chỉ với một render gọi!

Cách hiển thị Bộ sưu tập

Các phần giúp bạn hiển thị các bộ sưu tập mà không cần vòng lặp.

Giả sử rằng bạn đang hiển thị @books .

Bạn có thể làm điều này :

<%= render @books %>

Điều này sẽ hoạt động nếu bạn có _book.erb một phần &sử dụng book dưới dạng biến của bạn bên trong mẫu đó.

Ví dụ :

# app/views/books/_book.erb


  <%= image_tag(book.cover) %>

  
    

<%= book.title %>

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

Nếu bạn cần số sách hiện tại (cho các lớp CSS của mình), bạn có thể sử dụng book_counter .

Ở đâu book_ là tên kiểu máy của bạn.

Tôi nghĩ kết xuất bộ sưu tập là một trong những tính năng Rails yêu thích của tôi!

Hiểu bố cục đường ray

Khi bạn tạo một ứng dụng Rails mới, nó đi kèm với một thư mục "layouts" trong thư mục views.

Ở đó, bạn sẽ tìm thấy application.html.erb tệp.

Đó là bố cục mặc định!

Bố cục là gì?

Bố cục cho phép bạn tạo cho trang web của mình một giao diện nhất quán.

Đó là :

  • Thực đơn
  • Chân trang
  • Đang tải các tệp CSS &Javascript ...

Hầu hết thời gian, bố cục mặc định đều ổn.

Nhưng nếu bạn muốn một bố cục khác cho một trang cụ thể thì sao?

Bạn có thể sử dụng layout tùy chọn.

Ví dụ :

render :index, layout: 'admin'

Bạn có thể tắt bố cục :

render :index, layout: false

Và bạn có thể đặt bố cục ở cấp bộ điều khiển.

Như thế này :

class AdminsController < ApplicationController
  layout 'admin'
end

Kết xuất không kết thúc một hành động

Một điểm nhầm lẫn phổ biến là nghĩ rằng việc hiển thị (và chuyển hướng) bên trong một hành động của bộ điều khiển sẽ ngừng chạy bất kỳ mã nào sau nó.

Bạn có thể liên hệ với điều này nếu bạn gọi render nhiều lần.

Ví dụ :

def create
  if yellow_fruit?
    render :bananas
  end

  render :apples
end

Điều này sẽ dẫn đến lỗi vì render :apples luôn chạy và bạn không thể hiển thị hai lần trong cùng một hành động điều khiển.

Đây là giải pháp :

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

Một tùy chọn khác có thể là sử dụng return từ khóa sau khi render , nhưng để rõ ràng, tốt nhất nên tránh return ở giữa phương thức tuyên bố bất cứ khi nào có thể.

Tóm tắt

Bạn đã học về chủ đề hoàn toàn quan trọng của việc kết xuất trong Ruby on Rails.

Kết xuất cho phép bạn trả lại nội dung cho người dùng ứng dụng của bạn và đó là một trong những bước cuối cùng bên trong các hành động của bộ điều khiển. Hiểu về kết xuất giúp bạn viết các ứng dụng Rails tốt hơn.

Bây giờ đến lượt bạn, hãy mở trình chỉnh sửa và thực hành kỹ năng viết mã của bạn.

Cảm ơn vì đã đọc!