Edición de mi pregunta de concisión y actualizar lo que he hecho:¿Cómo uso accept_nested_attributes_for?
¿Cómo modelo que haya varias direcciones para una empresa y asignar una única dirección a un contacto, y ser capaz de asignarlos al crear o editar un contacto?
Quiero usar atributos anidados para poder agregar una dirección al momento de crear un nuevo contacto. Esa dirección existe como su propio modelo porque es posible que desee la opción desplegable de direcciones existentes en lugar de ingresar desde cero.
Parece que no puedo hacer que funcione. Consigo un método no definido `build' para nada: error NilClass
Aquí está mi modelo para lentes de contacto:
class Contact < ActiveRecord::Base
attr_accessible :first_name, :last_name, :title, :phone, :fax, :email, :company,
:date_entered, :campaign_id, :company_name, :address_id, :address_attributes
belongs_to :company
belongs_to :address
accepts_nested_attributes_for :address
end
Aquí es mi modelo de Dirección:
class Address < ActiveRecord::Base
attr_accessible :street1, :street2, :city, :state, :zip
has_many :contacts
end
me gustaría, cuando creando un nuevo contacto, accede a todas las Direcciones que pertenecen a los otros Contactos que pertenecen a la Compañía. Así que aquí es cómo represento Empresa:
class Company < ActiveRecord::Base
attr_accessible :name, :phone, :addresses
has_many :contacts
has_many :addresses, :through => :contacts
end
Aquí es como yo estoy tratando de crear un campo en la vista para _form de contacto de manera que, cuando alguien crea un nuevo contacto, que pasan a la dirección con el modelo de Dirección y asociar esa dirección al Contacto:
<% f.fields_for :address, @contact.address do |builder| %>
<p>
<%= builder.label :street1, "Street 1" %> </br>
<%= builder.text_field :street1 %>
<p>
<% end %>
Cuando intento Editar, el campo para Calle 1 está en blanco. Y no sé cómo mostrar el valor de show.html.erb.
En la parte inferior es mi consola de errores - parece que no puede crear valores en la tabla de direcciones:
Mi controlador de contactos es como sigue:
def new
@contact = Contact.new
@contact.address.build # Iundefined method `build' for nil:NilClass
@contact.date_entered = Date.today
@campaigns = Campaign.find(:all, :order => "name")
if params[:campaign_id].blank?
else
@campaign = Campaign.find(params[:campaign_id])
@contact.campaign_id = @campaign.id
end
if params[:company_id].blank?
else
@company = Company.find(params[:company_id])
@contact.company_name = @company.name
end
end
def create
@contact = Contact.new(params[:contact])
if @contact.save
flash[:notice] = "Successfully created contact."
redirect_to @contact
else
render :action => 'new'
end
end
def edit
@contact = Contact.find(params[:id])
@campaigns = Campaign.find(:all, :order => "name")
end
Aquí hay un fragmento de mi consola de errores: estoy fijando el atributo, pero no está creando en la tabla de direcciones ....
Procesamiento ContactsController # cr eate (por 127.0.0.1 en 2010-05-12 21:16:17)
[post] Parámetros: { "cometer" => "Enviar", "authenticity_token" => "d8/gx0zy0Vgg6ghfcbAYL0YtGjYIUC2b1aG + dDKjuSs = ", " contacto "=> {" company_name "=>" Allyforce ", " title "=>" "," campaign_id "=>" 2 ", " atributos_de_dirección "=> {" street1 "=> "abc"}, "fax" => "", "phone" => "", "last_name" => "", "date_entered" => "2010-05-12", "email" = > "", "first_name" => "abc"}}
Empresa Carga (0.0ms) [0m [0mSELECCIONAR * FROM "companies" WHERE ("companies". "Name" = "Allyforce") LIMIT 1 [0m
Dirección Create (16.0 ms) [0m
[0; "direcciones" 1mINSERT en ("ciudad", , "street1" "zip", "created_at", , "estado" "updated_at", "street2") VALUES (NULL, NULL, '2010-05-13 04:16:18 ', NULL, '2010-05-13 04:16:18 ', NULL, NULL) [0mContacto Crear (0.0ms) [0m
[ "contactos" 0mINSERT en ("compañía", , "título" "created_at", "updated_at", , "address_id" "campaign_id", "apellidos", "teléfono", "fax", " company_id "," date_entered ", " first_name "," email ") VALUES (NULL, '2010-05-13 04:16:18', '', '2010-05-13 04:16:18', 2, 2, '', '', '', 5, '2010- 05-12' , 'abc', '') [0m
Hmm creo que crea valor añadido en la tabla de direcciones, aquí es donde Dirección Crear (16.0ms) [0m [0; 1mINSERTAR EN "direcciones" ("ciudad", "zip", "created_at", "street1 "," updated_at "," street2 "," state ") VALUES (NULL, NULL, '2010-05-13 04:16:18', NULL, '2010-05-13 04:16:18', NULL, NULL) [0m – dombesz
Actualicé mi publicación, incluí el código en las vistas. – dombesz
Puede ver que en Dirección Crear los valores para street1 están en blanco ... no "abc" .... – Angela