2013-03-12 4 views
0

Je suis bloqué. J'ai les modèles suivants: profil, utilisateur, travail.Rails fields_pour ne pas apparaître

L'utilisateur a un profil, le profil a de nombreux emplois.

class Profile < ActiveRecord::Base 

    belongs_to :user 
    has_many :jobs 

    attr_accessible :user_id, :first_name, :last_name, :headline,:jobs_attributes 

    accepts_nested_attributes_for :jobs, allow_destroy: true 
end 

class User < ActiveRecord::Base 

    has_one :profile 
    attr_accessible :username,:email, :password,:profile_attributes 
    accepts_nested_attributes_for :profile, allow_destroy: true 
end 

class Job < ActiveRecord::Base 

    belongs_to :profile 
    belongs_to :country 

    attr_accessible :company, :country_id, :end_date, :job_title, :profile_id, :start_date 
end 

Maintenant, je veux que l'utilisateur puisse modifier son profil et ajouter un travail à son profil. Pour ce faire, je l'ai utilisé ce code:

<%= f.fields_for :jobs do |j| %> 
      <%= j.label :job_title, "Job Title" %> 
      <%= j.text_field :job_title %> 

      <%= j.label :company, "Company" %> 
      <%= j.text_field :company %> 
      ............................ 
<% end %> 

Mais la chose est, cela ne me montre les champs si l'utilisateur a déjà un emploi à son profil, et je suis en mesure de mettre à jour cela. Mais dans ce cas, le tableau est vide et il n'y aura pas d'itération. Que puis-je utiliser au lieu de cela, pour être sûr que les formulaires apparaissent même si l'utilisateur n'a pas de travail?

J'ai essayé d'ajouter un "begin-end while" mais cela n'a pas fonctionné. Ni vérifier si le tableau: jobs est vide et créer un nouvel objet Job ne fonctionne pas ... ou au moins mes essais.

Avez-vous des idées?

Merci!

La nouvelle méthode dans le contrôleur.

def new 

    resource = build_resource({}) 
    profile = resource.build_profile 
    profile.jobs += [profile.jobs.build] 
    respond_with resource 

end` 

Répondre

7

Si vous souhaitez inclure des champs pour une toute nouvelle Job, ajoutez au tableau jobs pendant que vous êtes dans le contrôleur:

profile.jobs.build 

De la même manière que nous construisons souvent un enregistrement factice dans nos actions new pour passer à form_for, nous devons aussi créer un enregistrement factice pour fields_for.

+0

J'ai modifié le message en ajoutant la nouvelle méthode dans le contrôleur. Ne fonctionne toujours pas. – user1894933

-1

Essayez de changer:
accepts_nested_attributes_for: profil, allow_destroy: true

À

accepts_nested_attributes_for: profil: update_only => true

+0

Ne fonctionne toujours pas. : | – user1894933

Questions connexes