J'ai un problème avec la conception de mon modèle User
et de faire une forme décente pour cela. Je veux juste me faire en sorte que je le fais mal :) Il va comme ceci:Comment concevoir un modèle avec deux relations indépendantes et optionnelles avec le même modèle?
User
a obtenu deux Address
es:
- un
Address
obligatoire pour l'identification et la facturation, - une expédition en option
Address
qu'il pouvait remplir ou laisser vide
J'ai essayé comme ceci:
class User < ActiveRecord::Base
has_one :address
has_one :shipping_address, :class_name => 'Address', :foreign_key => 'shipping_address_id'
accepts_nested_attributes_for :address
accepts_nested_attributes_for :shipping_address
#validations for user
end
et:
class Address < ActiveRecord::Base
#validations for address
end
Et puis je fais un formulaire pour User
en utilisant form_for
et imbriqué fields_for
. Comme ceci:
= form_for @user, :url => '...' do |a|
= f.error_messages
...
= fields_for :address, @user.build_address do |a|
...
Mais, malgré cela f.error_messages
génère des erreurs pour tous les modèles, les champs pour Address
es ne mettent pas en évidence si faux.
Aussi j'avoir des problèmes avec la désactivation de la validation de la deuxième adresse lorsque l'utilisateur a choisi de ne pas le remplir.
Et je doute que mon approche est correcte. Je veux dire la relation has_one
et la conception globale de ce dispositif.
La question:
Suis-je le fais mal? Comment feriez-vous cela à ma place?
J'utiliserais l'association 'belongs_to' dans' User' mais ensuite le formulaire explose! – nooga
où est stockée la clé étrangère? Si le 'user' a le' address_id' et le 'shipping_address_id' il devrait être' belongs_to' sinon 'has_one' (et l'adresse' belongs_to'). – nathanvda
Après avoir utilisé 'has_one' dans' User', ActiveRecord voulait les 'shipping_address_id' et 'address_id' dans Adresse! Alors je les ai mis là. Je sais que ce n'est pas la meilleure idée et toute la relation est quelque peu inversée en ce moment. – nooga