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::
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
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