Sử dụng Partials để chia sẻ view trong ruby on rails

Lượt xem: 939

Như các bạn cũng thấy form new và  form edit của chúng ta khá là giống nhau. Ngay cả code cũng giống nhau, nhờ vào form builder và định tuyến (routing). Trình tạo biểu mẫu tự động định cấu hình biểu mẫu để tạo loại yêu cầu phù hợp, dựa trên việc đối tượng mô hình đã được lưu trước đó chưa.

Bởi vì mã sẽ giống nhau, nên chúng ta sẽ đưa nó vào một view được chia sẻ được gọi là partial (một phần). Bây tạo file app/views/articles/_form.html.erb với nội dung sau:


<%= form_with model: article do |form| %>
  <div>
    <%= form.label :title %><br>
    <%= form.text_field :title %>
    <% article.errors.full_messages_for(:title).each do |message| %>
      <div><%= message %></div>
    <% end %>
  </div>

  <div>
    <%= form.label :body %><br>
    <%= form.text_area :body %><br>
    <% article.errors.full_messages_for(:body).each do |message| %>
      <div><%= message %></div>
    <% end %>
  </div>

  <div>
    <%= form.submit %>
  </div>
<% end %>

Đoạn mã trên giống như biểu mẫu của chúng ta trong app/views/articles/new.html.erb, ngoại trừ việc tất cả các lần xuất hiện của @article đã được thay thế bằng article. Vì các partial là mã được chia sẻ, nên cách tốt nhất là chúng không phụ thuộc vào các biến thể hiện cụ thể do một action của controller. Thay vào đó, chúng tôi sẽ chuyển article sang partial dưới dạng biến cục bộ.

Cập nhật lại code app/views/articles/new.html.erb sang sử dụng partial với hàm render:


<h1>New Article</h1>

<%= render "form", article: @article %>


Lưu ý:


Tên tệp của một phần phải được thêm tiền tố bằng dấu gạch dưới,

ví dụ: _form.html.erb. Nhưng khi kết xuất, nó được tham chiếu mà không có dấu gạch dưới, 

ví dụ: render "form".

Tương tự chúng ta cập nhật lại code app/views/articles/edit.html.erb


<h1<Edit Article>

<%= render "form", article: @article %>



Video thao tác cùng dandev