2013-06-21 8 views
-1

J'ai un modèle:Création d'un modèle imbriqué pour l'action "nouveau" dans un contrôleur

class MyModel < ActiveRecord::Base 
    attr_accessible #..... 

    belongs_to :owner 
end 

Et il y a l'action d'un contrôleur:

def new 
    @data1 = MyModel.new 
    end 

Et vue:

= f.select :owner_id, options_from_collection_for_select(MyModel.some_scope, :id, :full_name, @data1.owner.id) 

De toute évidence, @data1.owner.id est vide. Comment puis-je le rendre "non vide"?

+0

Mauvaise orthographe? 'owner.id' devrait être' owner_id' –

Répondre

1

La raison pour laquelle @data1.owner.id est vide est que @data1 n'a pas de propriétaire.

Vous pouvez générer un propriétaire en ajoutant cette ligne à la nouvelle action dans votre contrôleur:

@data1.create_owner 

Lorsque les arguments que vous passez dans cette méthode sont les attributs de votre propriétaire. Par exemple, ils pourraient avoir un prenom de Marius:

@data1.create_owner(first_name: 'Marius') 

Voyant que vous faites cela dans la nouvelle méthode, à moins que vous avez des contraintes non nulles sur l'un des attributs pour un propriétaire, je supposons que vous pourriez vouloir laisser simplement vide si.

La création de ce propriétaire pour @data1 doit le remplir avec un ID, rendant @data1.owner.id "non vide".

-1

Si vous « connaissez » le propriétaire au moment de la création de nouveaux MyModel que vous pouvez faire (en supposant own est un arbitre à l'objet du propriétaire):

@data1 = own.mymodels.new() 

Alors @data1 devrait être un arbitre de nouvel objet MyModel avec owner_id défini pour posséder id.

Questions connexes