2010-12-10 5 views
1
class User 
    has_one :user_profile 
end 
class UserProfile 
    belongs_to :user 
end 

Я рендеринг формы для редактирования учетной записи пользователя:Неопределенный метод в форме

<%= form_for current_user do |f| %> 
<%= f.text_field current_user.user_profile.first_name %> 
<%= end %> 

Но выдает ошибку:

NoMethodError in Account#edit 
undefined method `Andy' for #<User:0x5f375e8> 

Почему используется значение first_name ?

Как исправить это (без частичного)?

Кроме того, если кто-то может вести меня либо к книге, либо к обширным онлайн-учебникам по использованию форм (и вложенных форм) в Rails, Я был бы очень признателен за это. Формы сводят меня с ума!

ответ

3

Первый аргумент для помощника text_field - это символ, называя атрибут объекта модели. Так что в вашем случае это должно быть:

<%= form_for current_user.user_profile do |f| %> 
    <%= f.text_field :first_name %> 
<% end %> 

Если ваша форма должна изменить как пользователь и объекты модели Userprofile, вам необходимо fields_for для переключения контекста.

<%= form_for current_user do |f| %> 
    <%= f.text_field :some_user_attribute %> 
    <%= f.fields_for current_user.user_profile do |f| %> 
    <%= f.text_field :first_name %> 
    <% end %> 
<% end %> 

См: http://api.rubyonrails.org/classes/ActionView/Helpers/FormHelper.html#method-i-fields_for

+1

Кажется, что `first_name` находится в` user_profile` объект, который принадлежит к объекту пользователя. Так что ему нужно быть `f.fields_to` для создания формы с вложенными моделями. – PeterWong 2010-12-10 11:06:20

Смежные вопросы