2016-12-07 1 views
1

J'ai trois modèles dans mes rails 5 application ... Ce que je veux faire est d'être en mesure de créer une note sur la vue « show » de la personne , alors la note devrait automatiquement lier à cette personne et à toute autre personne que je choisis d'attacher la note.Rails has_many: par créer une association et un modèle associé au parent vue « show »

est ici où je suis arrivé à

Remarque

class Note < ApplicationRecord 
    has_many :person_notes 
    has_many :people, through: :person_notes 
    accepts_nested_attributes_for :person_notes 
end 

Personne Note (Joignez-vous à la table)

class PersonNote < ApplicationRecord 
    belongs_to :person 
    belongs_to :note 
end 

Personne

class Person < ApplicationRecord 
    has_many :person_notes 
    has_many :notes, through: :person_notes 
    accepts_nested_attributes_for :person_notes 
    accepts_nested_attributes_for :notes 
end 

Dans ma section "show" de mon contrôleur "people" j'ai e suivant:

def show 
    @notep = Note.new() 
    @person.notes << @notep 
end 

Cela crée une jointure d'une nouvelle note à ma personne enregistrer chaque fois que j'ouvre la page (évidemment je veux que la jointure de se produire sur la note que je l'ai créé.)

Je l'ai rendu cela dans un modal comme partiel à mon avis « show » (il y a une « fin » et un bouton de soumission, mais il est entre 3 divs et je sais qu'ils ne sont pas la cause du problème, donc je ne l'ai pas les inclure .:

<%= simple_form_for(@notep, remote: true) do |f| %> 
<%= f.error_notification %> 

    <%= f.input :subject %> 
    <%= f.input :note %> 
    <%= f.input :date, html5: true %> 
    <div class="input-field"> 
    <%= f.check_box :isalert, :id => "alert" %> 
    <%= f.label :isalert, :for => "alert" %> 
    </div> 

    <div class="input-field"> 
    <%= f.check_box :archived, :id => "archived" %> 
    <%= f.label :archived, :for => "archived" %> 
    </div> 

    <div class="input-field"> 
    <%= f.check_box :deleted, :id => "deleted" %> 
    <%= f.label :deleted, :for => "deleted" %> 
    </div> 
    <%= f.input :datecreated, html5: true %> 
    <%= f.input :user_id %> 


    <%= f.simple_fields_for :person_notes do |builder| %> 
    <%= builder.association :person, label_method: :lstfstfullname %> 
    <%= builder.input :deleted %> 
    <%= builder.input :datecreated, html5: true %> 
    <%= builder.input :user_id %> 
    <% end %> 

Vous pouvez probablement dire que je suis un newb total, mais j'apprécierais toute aide que je peux obtenir.

Merci,

Leah

+0

Assurez-vous que vous récupérez correctement le dossier de personne pour cette variable @person. Pourriez-vous inclure l'erreur spécifique à laquelle vous faites face? –

+0

Merci pour votre aide Daniel, je ne reçois pas une erreur ... le problème est 1. Je ne sais pas comment faire correctement cela. 2. Un enregistrement de note (et une association à la personne) est en cours de création automatiquement chaque fois que j'ouvre le dossier de personne ... – LeahPleurodon

Répondre

0

Si je comprends correctement, vous aurez besoin d'un contrôleur Notes séparées et de créer des mesures pour gérer la création de notes. Ensuite, dans votre vue Afficher les personnes, vous pouvez ajouter un formulaire et un champ de saisie soumis à NotesController # create.

+0

J'ai un contrôleur de note, je peux créer la note sans problème de la page « show » de la modèle de personnes. Cependant, je ne peux pas l'obtenir pour relier la personne à la note automatiquement – LeahPleurodon

+0

'@person.notes << @ notep' ne fait pas partie de votre méthode show. Il appartient à NotesController # create. – luckyruby