Problem z formtastic i has_one

Witam
Mam coś takiego User has_one Personal. Chciałbym jedno pole z Personal dac w formularzu rejestracyjnym dla User. Próbowałem zgodnie z instrukcjami:

<% form.semantic_fields_for :personal do |personal| %> <%= personal.inputs :contact_phone %> <% end %>
oraz formtasticowo::

<%= form.inputs :contact_phone, :for => :personal %>

Dodaje w obu przypadkach:

W User mam oczywiście:

accepts_nested_attributes_for :personal

Contact_phone jest przekazywany w params w user[] a wydaje mi sie z powinien być w user[:personal] ?

Masz w modelu attr_protected :contact_phone?

w User ? Jesli mam samo attr_protected to przy renderowaniu widoku mam błąd undefined method `contact_phone’ for #User:0x7f397300bd20 z attr_accessor błąd się nie pojawia

Błąd “Can’t mass-assign these protected attributes: contact_phone” pojawia się, gdy chcesz zrobić update kilku pól jednocześnie, w tym pola zabezpieczonego przed takim updatem. Czyli jeśli masz tabelę users z kolumnami name, email oraz model

class User attr_protected :email end
i np. w kontrolerze wykonasz

@user = User.find(params[:id]) @user.update_attributes(params[:user]) # gdzie params[:user] = {:name => 'Tom', :email => 'tom@example.com'}
Ten błąd pojawi się też, jeśli model zdefiniujesz jako

class User attr_accessible :name end
Więcej: http://api.rubyonrails.org/classes/ActiveModel/MassAssignmentSecurity/ClassMethods.html#method-i-attr_protected i http://api.rubyonrails.org/classes/ActiveModel/MassAssignmentSecurity/ClassMethods.html#method-i-attr_accessible

dzięki, ale nadal to nie rozwiązuje problemu czemu formtastic wrzuca pola i od usera i od personal do jednej tablicy

Oczywiście masz to:

class User accepts_nested_attributes_for :personal end
Jak wygląda wygenerowany html w formularzu? Jakie są atrybuty ‘name’ tagów input?

tak, mam
html wygląda tak:

Z grubsza rozwiązałem ten problem, w kontrolerze brakowało
@user.build_personal
oraz w modelu
attr_accessible :personal_attributes

Pojawił się tylko jeden problem, chciałbym pominąć w tym przypadku walidacje dla @user.personal. Uzywam Authlogica i użytkownik przy rejestracji jest zapisywany za pomocą @user.save_without_session_maintenance, wiem że mogę dodać false jako atrybut tej metody, ale to wyłącza wszystkie walidacje a mi zależy tylko dla @user.personal