Tengo dos modeloscarriles - build_association no está funcionando para una relación has_one y belongs_to
class Subscription < ActiveRecord::Base
belongs_to :client
end
class Client < ActiveRecord::Base
has_one :subscription
end
pero cuando intento para crear uno de los padres del niño, por ejemplo, sub.build_client la clave externa no se establece, p.
>> sub = Subscription.new
=> #<Subscription id: nil, token: nil, user_id: nil, created_at: nil, updated_at: nil, cancelled: nil, active: nil, client_id: nil>
>> sub.save(false);
?> client = sub.build_client
=> #<Client id: nil, server_id: nil, ip: nil, created_at: nil, updated_at: nil>
>> client.save(false)
=> true
>> sub.client_id
=> nil
>> sub
=> #<Subscription id: 4, token: nil, user_id: nil, created_at: "2010-01-11 06:07:45", updated_at: "2010-01-11 06:07:45", cancelled: nil, active: nil, client_id: nil>
No funciona si hago client.build_subscription
?> client = Client.new
=> #<Client id: nil, server_id: nil, ip: nil, created_at: nil, updated_at: nil>
>> client.save(false)
=> true
>> sub = client.build_subscription
=> #<Subscription id: nil, token: nil, user_id: nil, created_at: nil, updated_at: nil, cancelled: nil, active: nil, client_id: 4>
>> sub.save(false)
=> true
>> sub
=> #<Subscription id: 5, token: nil, user_id: nil, created_at: "2010-01-11 06:09:32", updated_at: "2010-01-11 06:09:32", cancelled: nil, active: nil, client_id: 4>
>> client
=> #<Client id: 4, server_id: nil, ip: nil, created_at: "2010-01-11 06:09:02", updated_at: "2010-01-11 06:09:02">
>> ^C
He pasado 3 horas jugando y se puso a ninguna parte. ¿Alguien puede explicar lo que estoy haciendo mal, cosas para comprobar, etc.
gracias John, pensé que este era el caso (sí consulté la guía de rieles pero no pude encontrar esto explicado, así que quería confirmar aquí en stackoverflow). Pero ¿cómo puede ser que con un has_many pertenezca a la relación esto se pueda hacer? – robodisco
Yo también pensé que si no se puede hacer, ¿por qué está el método de compilación allí? Si el foreign_id no se puede establecer, ¿cuál es el uso de ese método en esta relación? – robodisco
Esa es una buena pregunta. –