STI and accepts_nested_attributes_for in rails
- by ryanshackintosh
I have models as follows:
class Entity < ActiveRecord::Base  
  has_many :addresses
  accepts_nested_attributes_for :addresses, :reject_if => lambda { |a| a[:label].blank?} , :allow_destroy => true
end
class Client < Entity
  before_save :set_type
  private
  def set_type
    self.type = "Client"
  end  
end
class Address < ActiveRecord::Base
   belongs_to :entity
end
I have recently implemented accepts_nested_attributes_for on the /clients/new form, as follows:
<% form_for(@client, :html => {:class => 'form'}) do |f| -%>
        <%= f.label :name %>
        <%= f.text_field :name -%>  
        <%= f.label :phone %>
        <%= f.text_field :phone %>
        <% f.fields_for :addresses do |a| %>
            <%= a.label :street %>
            <%= a.text_field :street%>     
            <%= a.label :city %>
            <%= a.text_field :city %>  
      <% end %>
<% end %>
And my controller as follows:
class ClientsController < ApplicationController
  before_filter :load_client , :except => [:index, :new, :create, :render_clients]
  def new
    @client = Client.new
    @client.addresses.build    
  end
  def create
    @client = Client.new(params[:client])
    if @client.save
      flash[:notice] = 'Client has been successfully added'
      redirect_to @client
    else
      render :action => 'new'
    end
  end
The issue is that when the record is saved it gives an error stating:
"Entity can't be blank"
I assume it is something to do with the fact that a 'Client' and not an 'Entity' is being added.
Can anyone point me in the right direction?