2011-10-13 24 views
5

Kullanıcı adı user_info ile bire bir ilişki oluşturuyorum. Aşağıda çalışma çözümü. user.rb user_info.rb olarakRaylar 3: has_one ile eşleşme, İç içe öznitelikleri güncelleştirilmemiş

has_one :user_info 
accepts_nested_attributes_for :user_info, :allow_destroy => true 
attr_accessible :username, :email, :password, :password_confirmation, :remember_me, :user_info_attributes 

yılında

ben içermemelidir anlıyoruz

<% resource.build_user_info if resource.user_info.nil? %> 
<%= form_for(resource, :as => resource_name, :url => registration_path(resource_name), :html => { :method => :put }) do |f| %> 
    ... 
    <%= f.fields_for :user_info do |info| %> 
     <%= info.text_field :first_name %> 

vasiyetle/kayıtlar/edit.html.erb olarak

belongs_to :user 
attr_accessible :first_name, :last_name 

görünümde yapı. Ama kontrolöre veya modele 'dokunmak' istemiyorum. Bu en kolay yol.

+0

inşa hattı düzgün çalışmadığını ortaya çıktı. Resource.user_info.nil ise, <% resource.build_user_info olmalıdır? %> ' –

cevap

3

inşa çizgi görünümünde düzgün çalışmadığını çıkıyor accepts_nested_attributes_for için çağrı :autosave => true deneyin.

olmalı: <% resource.build_user_info if resource.user_info.nil? %>

1

+0

' hass_one: user_info,: autosave => true' yerine 'accepts_nested attributes_for' yerine eklenmelidir. Ancak, bu hala çalışmıyor. First_name kaydetmez. –

+0

Hmm, tamam, o zaman neden sadece mevcut kullanıcı modeline bilgi eklemiyorsunuz? Bunu yapmanın en basit yolu bu olurdu. – janders223

+2

Büyük bir kullanıcı modeli yapmak iyi bir modelleme değildir. Tipik olarak kullanıcı modeli web sitesi, adres, benim hakkımda, hobileriniz vb. Gibi birçok ikincil bilgiyi içerir. Aynı modele koymak, sadece kullanıcı listesini veya kimlik doğrulama için herhangi bir işlemi çekmeniz gerektiğinde, her şeyi Başka. Bire bir ilişki ile 2 modele ayrılması yaygın ve iyi bir uygulamadır. Bu sorudaki –

İlgili konular