Tôi có một vấn đề thú vị. Tôi đang sử dụng Ruby 1.9.2 và Rails 3.1.3.Đường ray đẩy vào mảng lưu đối tượng
Tôi có 2 mô hình, để đơn giản hóa giả sử khách hàng và cửa hàng. Các cửa hàng có nhiều khách hàng và khách hàng thuộc về một cửa hàng. Tôi đang cố gắng thu thập tất cả các khách hàng cho một cửa hàng và tạo một địa điểm cho một vài thứ nữa để tôi có thể điền các giá trị sau này. Thay vào đó, customer.save được gọi khi tôi không mong đợi nó.
store = Store.find(1)
customers_array = store.customers
random_array = Array.new
customers_count = customers_array.count + 1
(customers_count..2).each do |i|
customer = Customer.new
c.id = "#{i}000000000000"
random_array << customer # this line doesn't call customer.save
customers_array << customer # this line calls customer.save when store has customers
end
Vì lý do nào đó khi khách hàng được đưa vào mảng, customer.save được gọi. Nó không xảy ra nếu bạn đẩy vào một mảng là một mảng đơn giản và không phải là một mối quan hệ.
Tôi đã tìm được cách giải quyết, nhưng tôi vẫn tự hỏi tại sao điều đó lại xảy ra. Cách giải quyết:
store = Store.find(1)
initial_customers_array = store.customers
additional_customers_array = Array.new
customers_count = initial_customers_array.count + 1
(customers_count..2).each do |i|
customer = Customer.new
c.id = "#{i}000000000000"
additional_customers_array << customer
end
customers_array = initial_customers_array + additional_customers_array
Đối với những người tìm kiếm giải pháp chứ không phải lý do: sử dụng '' 'build''' trên bộ sưu tập để tạo mô hình mà không lưu nó: http://api.rubyonrails.org/classes/ActiveRecord/Associations/ClassMethods .html # module-ActiveRecord :: Hiệp hội :: ClassMethods-label-Collections – blu
Tôi đã có vấn đề ngược lại. Sử dụng 'build' trong các thông số kỹ thuật mô hình, sau đó thêm các mục vào một bộ sưu tập bằng cách sử dụng << không hoạt động. Câu trả lời cho câu hỏi này giải thích tại sao không. – CJBrew