2010-12-11 12 views
5

mam tych klas:Jak db: wysiewać model i wszystkie modele zagnieżdżone?

class User 
    has_one :user_profile 
    accepts_nested_attributes_for :user_profile 
    attr_accessible :email, :password, :password_confirmation, :user_profile_attributes 
end 

class UserProfile 
    has_one :contact, :as => :contactable 
    belongs_to :user 
    accepts_nested_attributes_for :contact 
    attr_accessible :first_name,:last_name, :contact_attributes 
end 

class Contact 
    belongs_to :contactable, :polymorphic => true 
    attr_accessible :street, :city, :province, :postal_code, :country, :phone 
end 

próbuję wstawić rekord do wszystkich 3 stoły tak:

consumer = User.create!(
    [{ 
    :email => '[email protected]', 
    :password => 'aaaaaa', 
    :password_confirmation => 'aaaaaa', 
    :user_profile => { 
     :first_name => 'Gina', 
     :last_name => 'Davis', 
     :contact => { 
     :street => '221 Baker St', 
     :city => 'London', 
     :province => 'HK', 
     :postal_code => '76252', 
     :country => 'UK', 
     :phone => '2346752245' 
    } 
    } 
}]) 

rekord zostanie wstawione do users stole, ale nie Into the user_profiles lub contacts tabel. Nie występuje również błąd.

Co jest właściwym sposobem na zrobienie czegoś takiego?

SOLVED (dzięki @Austin L. za link)

params = { :user => 
    { 
    :email => '[email protected]', 
    :password => 'aaaaaa', 
    :password_confirmation => 'aaaaaa', 
    :user_profile_attributes => { 
     :first_name => 'Gina', 
     :last_name => 'Davis', 
     :contact_attributes => { 
      :street => '221 Baker St', 
      :city => 'London', 
      :province => 'HK', 
      :postal_code => '76252', 
      :country => 'UK', 
      :phone => '2346752245' 
      } 
     } 
    } 
} 
User.create!(params[:user]) 

Odpowiedz

3

Twój model użytkownik musi być ustawiony tak, aby akceptować zagnieżdżonych atrybutów poprzez accepts_nested_attributes

znaleźć w dokumentacji Rails aby uzyskać więcej informacji i przykłady: http://api.rubyonrails.org/classes/ActiveRecord/NestedAttributes/ClassMethods.html

Edytuj: Możesz również rozważyć użycie has_one :contact, :through => :user_profile, które pozwolą Ci uzyskać dostęp do c ontact podobny do tego: @contact = User.first.contact.

Edit 2: Po zabawy w rails c najlepszym rozwiązaniem mogę znaleźć to:

@c = Contact.new(#all of the information) 
@up = UserProfile.new(#all of the information, :contact => @c) 
User.create(#all of the info, :user_profile => @up) 

Edit 3: Zobacz pytanie dla lepszego rozwiązania.

+0

Tak, wszystko jest skonfigurowane (mam już widoki i wszystkie działają poprawnie). Ale dlaczego nie powiodło się w db: seed jest problemem – Zabba

+0

czy usunąłeś "accepts_nested_attributes" ze swoich modeli, kiedy zamieszczałeś tutaj? –

+0

Tak, opublikowałem tylko istotę modeli. Dodam wszystkie szczegóły. Przepraszam :) – Zabba

Powiązane problemy