2011-09-09 20 views
46

Tôi đã nhận được tất cả các loại thông tin mâu thuẫn liên quan đến câu hỏi cơ bản này và câu trả lời là rất quan trọng đối với các vấn đề hiện tại của tôi. Vì vậy, rất đơn giản, trong Rails 3, nó có được phép hay không được phép sử dụng accept_nested_attributes_for với một mối quan hệ thuộc_toặc?Does_nested_attributes_for có làm việc với attribute_to không?

class User < ActiveRecord::Base 
    belongs_to :organization 
    accepts_nested_attributes_for :organization 
end 

class Organization < ActiveRecord::Base 
    has_many :users 
end 

Trong một cái nhìn:

= form_for @user do |f| 
    f.label :name, "Name" 
    f.input :name 

    = f.fields_for :organization do |o| 
    o.label :city, "City" 
    o.input :city 

    f.submit "Submit" 
+1

Tài liệu http://api.rubyonrails.org/classes/ActiveRecord/NestedAttributes/ClassMethods.html không đề cập 'thuộc_to' nên tôi nghi ngờ điều đó. Tại sao bạn không thử nó và lấy lại cho chúng tôi? – epochwolf

Trả lời

21

Các epochwolf doc trích dẫn tiểu bang ở dòng đầu tiên "thuộc tính lồng nhau cho phép bạn lưu các thuộc tính trên các hồ sơ liên quan qua phụ huynh." (sự nhấn mạnh của tôi).

Bạn có thể quan tâm đến this other SO question which is along the same lines as this one. Nó mô tả hai giải pháp có thể: 1) di chuyển accept_nested_attributes sang phía bên kia của mối quan hệ (trong trường hợp này là Tổ chức) hoặc 2) using the build method để xây dựng Tổ chức trong Người dùng trước khi kết xuất biểu mẫu.

Tôi cũng tìm thấy một ý chính mô tả a potential solution for using accepts_nested_attributes with a belongs_to relationship nếu bạn sẵn sàng giải quyết thêm một chút mã. Điều này cũng sử dụng phương pháp build.

+0

Tôi đã cập nhật ý kiến ​​đó cho Rails 4: https://gist.github.com/dmzza/ce9b6e660c576039afca984cda0f0aed – dmzza

19

Thuộc tính lồng nhau xuất hiện để hoạt động tốt cho một liên kết thuộc tính như của Rails 4. Nó có thể đã được thay đổi trong phiên bản cũ hơn của Rails, nhưng tôi đã thử nghiệm trong 4.0.4 và nó chắc chắn hoạt động như mong đợi.

+10

Vẫn còn trong Rails 4.1.1, accepts_nested_attributes không hoạt động với * đa hình * thuộc_to. Tôi phải chuyển nó sang một bên khác (has_one) của hiệp hội. Đây chỉ là để chia sẻ thông tin với người khác. –

+0

Tôi đồng ý với kid_drew. Tôi chỉ có nó để làm việc trong Rails phiên bản 4.2.9. – Tintin81

9

Đối belongs_to hiệp hội trong Rails 3.2, mô hình lồng nhau cần hai bước sau:

(1) Thêm mới attr_accessible để trẻ em mô hình của bạn (mô hình tài khoản).

accepts_nested_attributes_for :organization 
attr_accessible :organization_attributes 

(2) Thêm @user.build_organization để bạn trẻ điều khiển (User controller) để tạo ra cột organization.

def new 
    @user = User.new 
    @user.build_organization 
end 
+0

Tôi đang làm điều này, nhưng tôi đang gặp rất nhiều vấn đề khiến nó hoạt động. có cha mẹ chấp nhận các tham số lồng nhau cho con của nó dường như không đủ cho nó để xây dựng đúng cách, nó mong đợi – Csteele5

Các vấn đề liên quan