Hành vi mặc định cho Ruby on Rails là lưu các thay đổi được thực hiện cho các liên kết thu thập. Có cách nào để thay đổi hành vi này, để tôi có thể sửa đổi các bộ sưu tập trong bộ nhớ mà không có thay đổi được ghi vào cơ sở dữ liệu.Tắt tính năng lưu tự động qua liên kết has_many - Ngắt kết nối đối tượng ActiveRecord khỏi phiên
Vì vậy, nếu tôi có hai lớp:
class Project < ActiveRecord::Base
has_many :tasks
class Task < ActiveRecord::Base
belongs_to :project
và viết một số mã như:
Project.tasks.clear
Project.tasks << task1
Project.tasks << task2
sau đó nó tự động xóa tất cả các nhiệm vụ liên quan đến dự án và tự động ghi các thay đổi đối với db.
Đây là ví dụ về những gì tôi đang cố gắng đạt được. Tôi biết tôi có thể sử dụng Project.tasks.build() để thêm một nhiệm vụ mới vào bộ sưu tập mà không có nó được lưu tự động, nhưng các nhiệm vụ mà tôi đang thêm không phải là nhiệm vụ mới. Họ là các liên kết đến một tập hợp hạn chế các nhiệm vụ được định nghĩa trong db. Bạn có thể nghĩ về chúng như là các mục trong một liệt kê các nhiệm vụ. Ngoài ra Project.tasks.clear ngay lập tức nhấn db.
Trong thế giới java, sử dụng Hibernate, tôi sẽ ngắt kết nối thực thể khỏi phiên và có thể sửa đổi thực thể trong bộ nhớ cho đến khi kết nối lại và lưu.
Cảm ơn
Điều này có vẻ là một vấn đề tương tự với câu hỏi của tôi: http://stackoverflow.com/questions/11353582/delete-associated-records-when-model-is-saved – iblue
Nó không vi phạm RoR: has_many logic? –