Các thuộc tính lồng nhau và các hình thức lồng nhau

Tram Ho

Giới thiệu

Thay vì trước đây ta chỉ quen với việc tạo, update một bản ghi của một đối tượng thì nay ta có thể tạo, update luôn các đối tượng con có liên kết với nhau. Nested Attributes cho phép bạn lưu các thuộc tính của bản ghi của đối tượng thông qua đối tượng cha của nó. Mặc định thì Nested Attributes đã bị tắt nên cần thêm vào model class method #accepts_nested_attributes_for. Ví dụ:

Thực hành:

Để làm quen nhanh với Nested Attributes thì ta thử tạo một app nhỏ đơn giản

Tạo 2 model

chạy rails db:migrate

Ở model User:

Ở UsersController

Ở views/users/_form.html.erb ta dùng fields_for
dùng trong Nested Forms

Tới đây ta đã xây dựng được một nested forms có thể tạo một đối tượng user và liên kết address của nó cùng một lúc.

Nâng cao hơn tí xíu

Ở trên là hướng dẫn cơ bản để làm quen Nested Attributes và Nested forms. Nhược điểm của form ở trên chỉ là một Static form, ta không thể biết trước User muốn add bao nhiêu Address được nên giờ ta hãy thử tạo 1 Dynamic form cho phép user muốn thêm address thì chỉ cần 1 cú click chuột.

Sửa lại form 1 chút xíu, add thêm class và thêm js, css.

Sau bước làm trên bạn sẽ có 1 form như thế này. Giờ nó đã trở thành một Dynamic form cho phép bạn có thể tạo thêm nhiều address.

Việc tiếp theo chỉ cần điền thông tin và ấn submit để xem kết quả.

Nguồn:

Trên là những bước cơ bản giúp làm quen nhanh với Nested Attributes. Ngoài ra để kỹ hơn có thể tham khảo thêm ở dưới.
https://api.rubyonrails.org/classes/ActiveRecord/NestedAttributes/ClassMethods.html
http://jyrkis-blogs.blogspot.com/2014/06/adding-fields-on-fly-with-ruby-on-rails.html
https://www.tutorielsenfolie.com/en/tutorials-7-Dynamic-form-in-JavaScript.html

Chia sẻ bài viết ngay

Nguồn bài viết : Viblo