nested attributes and initialization

I have a user model that has a few different roles (say a client and an agent) The agent has some extra relationships not found in a client role (has_one :agent_profile, for instance)

I have an edit_profile action for an agent that has these nested attributes in the form and the model accepts_nested_attributes_for :agent_profile:

<% form_for @agent, :url => agent_path(@agent) do |form| %>   <%= form.label :name %>   <%= form.text_field :name %>

  <% form.fields_for :agent_profile do |a_form| %>   <%= a_form.label :website, "Website Address:"%>   <%= a_form.text_field :website %>   <% end %> <% end %>

If an agent_profile object isn't present however, when an agent edits their profile, they get the:

ActionView::TemplateError (You have a nil object when you didn't expect it! The error occurred while evaluating nil.new_record?

Is it common that I would have an after_initialize method such as:

  def after_initialize     self.build_agent_profile if self.role_name == "agent" && ! self.agent_profile   end

Seems a bit odd to me to do this for all relationships I have that accept nested attributes, but I can't really think of a better way. I also don't want to split the User model into two models because agents and clients log in/sign up in the same way.

Hello Bradley,

Please check on this railscast http://railscasts.com/episodes/189-embedded-association

This is a better way to handle roles in your case.

's Rodrigo Dellacqua IBM - IGF Project Manager “Communication is the key”