2011-09-09 25 views
46

Otrzymuję różnego rodzaju sprzeczne informacje dotyczące tego podstawowego pytania, a odpowiedź jest bardzo ważna dla moich bieżących problemów. Tak więc, po prostu, w Railsach 3, czy dozwolone lub niedozwolone jest używanie accepts_nested_attributes_for z relacją belongs_to?Czy accepts_nested_attributes_do pracy z belongs_to?

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

class Organization < ActiveRecord::Base 
    has_many :users 
end 

W widoku: „Zagnieżdżone atrybuty pozwalają zaoszczędzić atrybutów powiązanych rekordów przez rodzica

= 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

Docs http://api.rubyonrails.org/classes/ActiveRecord/NestedAttributes/ClassMethods.html nie wspominając 'belongs_to' więc wątpię. Dlaczego nie spróbujesz i nie wrócisz do nas? – epochwolf

Odpowiedz

21

Doc epochwolf cytowanym stany w pierwszym wierszu (mój nacisk).

Możesz być zainteresowany this other SO question which is along the same lines as this one. Opisano dwa możliwe rozwiązania: 1) przeniesienie accepts_nested_attributes na drugą stronę relacji (w tym przypadku Organizacja) lub 2) using the build method w celu zbudowania organizacji w Użytkowniku przed renderowaniem formularza.

Znalazłem również istotę opisującą a potential solution for using accepts_nested_attributes with a belongs_to relationship, jeśli chcesz zająć się trochę dodatkowym kodem. Wykorzystuje to również metodę build.

+0

Zaktualizowałem to dla Rails 4: https://gist.github.com/dmzza/ce9b6e660c576039afca984cda0f0aed – dmzza

19

Zagnieżdżone atrybuty wydają się działać dobrze dla asocjacji belongs_to z Rails 4. Mogło to zostać zmienione we wcześniejszej wersji Railsów, ale testowałem w wersji 4.0.4 i zdecydowanie działa zgodnie z oczekiwaniami.

+10

Nadal w Railsach 4.1.1, accepts_nested_attributes nie działa z * polimorficznym * belongs_to. Musiałem przenieść go do innej (has_one) strony stowarzyszenia. Dzieje się tak tylko w celu udostępnienia informacji innym. –

+0

Zgadzam się z kid_drew. Właśnie dostałem go do pracy w Rails w wersji 4.2.9. – Tintin81

9

Dla belongs_to stowarzyszenia w Rails 3.2, zagnieżdżonych modelu potrzebuje następujące dwa etapy:

(1) Dodaj nowy attr_accessible dziecku model (model User).

accepts_nested_attributes_for :organization 
attr_accessible :organization_attributes 

(2) Dodaj @user.build_organization dziecku regulatora (regulator użytkownika) w celu stworzenia kolumny organization.

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

Robię to, ale mam dużo problemów z uruchomieniem tego. posiadanie przez element macierzysty parametrów zagnieżdżonych dla jego elementu potomnego nie wydaje się wystarczające do prawidłowego zbudowania, czego oczekuje – Csteele5