2012-03-24 3 views
0

J'ai trois modèles:Rails association has_one

class User < ActiveRecord::Base 
    has_many :basiccases 
end 

class Basiccase < ActiveRecord::Base 
    belongs_to :user 
    belongs_to :form3_c 
end 

class Form3C < ActiveRecord::Base 
    has_one :basiccases 
end 

Comment puis-je ajouter une nouvelle Form3C au Basiccase? Dois-je utiliser un contrôleur Basiccase ou un contrôleur Form3C pour créer un formulaire? Si j'utilise Form3cController comment puis-je définir la clé étrangère dans la BasiccaseController?

+0

La relation 'has_one' devrait aller dans un modèle, pas un contrôleur. Donc, si vous avez une classe de modèle 'Form3C', essayez d'y ajouter la relation. La relation 'has_one' devrait aller au singulier comme dans' has_one: basiccase'. Vous devriez normalement construire 'Basiccase' à partir de l'instance' Form3C': 'self.build_basiccase' va construire le basiccase qui' appartient_à '' Form3C'. – mliebelt

Répondre

4

Des relations telles que has_one sont définies sur des modèles plutôt que sur des contrôleurs. Je pense que vous voulez que cela (pour être en mesure d'ajouter un Form3c à un Basiccase --not sûr quelle direction vous voulez la relation aller):

class Form3c < ActiveRecord::Base 
    belongs_to :basiccase 
end 

class Basiccase < ActiveRecord::Base 
    belongs_to :user 
    has_one :form3c 
end 

Pour obtenir des conseils sur la construction du contrôleur et la forme (vue), regardez à this Rails tutorial, en commençant autour de la section 6.

+0

Je suis vraiment confus où garder la relation has_one car les deux sont un à un. Mon exigence est l'utilisateur devrait pouvoir ajouter la nouvelle forme à un cas de base. Pouvez-vous me suggérer comment je peux faire ceci? –

0

Bien que votre désignation du modèle est pas convaincant, je suppose votre table basiccases a une colonne form3c_id.

Vous devez créer un formulaire pour objet form3c puis dans le contrôleur, vous pouvez construire un objet basiccase comme @form3c_build_basiccase qui, comme une clé étrangère prendra automatiquement form3c_id. Voir this rails cast.

Ou vous pouvez aller pour form3c modèle accepts_nested_attributes_for :basiccase. Voir à ce sujet here.