Cómo actualizar el atributo anidado existente w / no FK
-
30-09-2019 - |
Pregunta
Suponiendo has_one usuario: suscripción, suscripción belongs_to: usuario, y estoy usando accepts_nested_attributes_for a la suscripción nido atribuye a la forma de creación de usuarios, ¿cuál es la mejor forma de localizar y actualizar y existentes de suscripción (si existe) sobre la base de usuario. == correo electrónico Subscription.email?
Tenga en cuenta que las suscripciones existentes podrían tener user_id = nil
Solución
Probablemente lo que quiere hacer es utilizar el correo electrónico como la clave externa:
class User < ActiveRecord::Base
has_one :subscription, :foreign_key => "email", :primary_key => "email"
end
Otros consejos
Me imagino que esto tendría que ser dividida en un proceso de dos pasos:
- Busque el usuario que desea actualizar.
- Busque una suscripción (si los hay) con dirección de correo electrónico del usuario, establezca la suscripción del usuario a este registro.
- Actualizar el usuario de forma normal. Puesto que la asociación está presente (es decir user.subscription no será nil), los registros de suscripción se actualiza correctamente.
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow