2011-04-28 5 views
0

Je travaille sur une application pour mes enfants à se connecter leurs tâches. J'ai 3 enfants (Nick, Sienne, Mac) et une page d'accueil avec chaque nom ... hyperlinkedRails associations/sessions question

Je les associations suivantes:

Child: 
    has_many :completions 
    has_many :chores, :through=>:completion 

Completion: 
    belongs_to :child 
    belongs_to :chore 

Chore: 
    has_many :completions 
    has_many :kid, :through=>:completion 
  1. Comment puis-je (après avoir cliqué sur le nom de l'enfant) enregistrer le child_id en tant qu'objet de session pour l'envoi des complétions aux modèles d'achèvement? Comment effacer/modifier cette session à un nouvel enfant lorsqu'un autre enfant clique sur son nom dans la page d'accueil?

Toute aide est grandement appréciée. Merci, CB

+1

Quelle est la relation entre le routage Rails et votre question? :/ – Spyros

+0

Y a-t-il une question ici? Cela ne semble certainement pas être le cas. –

+0

J'espère avoir nettoyé la question. J'ai besoin de passer le child_id à la vue suivante (corvées/index) ... de sorte que lors de la sélection des tâches et en cliquant sur submit .. les child_id et chore_id sont passés au modèle terminé. Merci beaucoup. – chris

Répondre

0

Si je comprends bien la question (au moins comme décrit dans votre commentaire), j'ai fait quelque chose de similaire récemment. Voir Building a nested attribute from multiple parent objects. Au fond, je polymorphic_url pour faire un lien pour créer un nouvel élément (je ne serais probablement utiliser @ child.chores.build (params)) et passer l'attribut: chore_id, à savoir

link_to "Mark as complete", polymorphic_url([:new, @child, :completion], :chore_id => @chore.id) 

Dans votre contrôleur assurez-vous que pour votre ChoresController # new vous avez quelque chose comme

def new 
    @chore = <current_child>.chores.build(params) 
end 

Espérons que cela aide.

+0

Je l'apprécie. Je pense que je demande quelque chose d'encore plus simple ... Comment puis-je définir "enfant actuel" en cliquant sur le nom de l'enfant? – chris

+0

Parlez-vous plus comme une variable globale? Ou sera-ce dans le contexte d'un certain modèle? –

1

Alors josh est allé au-dessus et au-delà. En tant que noob je demandais quelque chose de beaucoup plus simple et élémentaire pour la plupart des gens. La réponse est assez simple:

ApplicationController 

private 
    def current_child 
    child = Child.find(params[:id]) 
    session[:child_id] = child.id 
    end 
end 

Cela m'a permis de stocker l'ID de l'enfant dans une session et après le modèle achevé.

+0

Merci pour l'acceptation. Votre solution allait être dans le sens de ma prochaine suggestion. Content que ça marche pour toi. –

+0

Merci à vous aussi Josh. On dirait que vous êtes une aide précieuse/ressource pour cette communauté cool. – chris