2012-05-05 3 views
1

J'ai essayé de comprendre ce qui suit, mais je n'ai pas réussi à trouver une solution soignée. Peut-être qu'il me manque quelque chose de basique.Comment initialiser un modèle de rails basé sur son association

Vue d'ensemble

J'ai un grand nombre à plusieurs tâches et modèle utilisateur.

Un utilisateur peut avoir plusieurs tâches, et une tâche peut être partagée par de nombreux utilisateurs.

créer des tâches en utilisant les suivantes:

user.tasks.create 

Les liens de travail avec l'utilisateur par le user_id et les liens user_id avec la tâche en utilisant le task_id, en utilisant: par task_table

Une tâche appartient à un utilisateur, mais une fois terminé, il est passé à l'utilisateur suivant de la tâche.

Problème

Il est toujours le cas que pour l'utilisateur qui crée la tâche, il est à son tour pour terminer la tâche. Une fois cela fait, il est passé à l'utilisateur suivant.

J'ai actuellement:

user1.tasks.create(:current_user => user1.id) 

lorsque l'utilisateur a terminé la tâche,: changements de CURRENT_USER. Ce que j'essaye de réaliser est juste une manière de devoir écrire user1.tasks.create - et automatiquement le current_user est placé, sans explicitement devoir passer en user1.id. Y a-t-il un moyen de le faire? Peut-être en utilisant un constructeur (je les ai pratiquement tous essayés, mais je n'arrive pas à en faire).

Merci!

+0

Après ce que la logique voulez-vous choisir le premier « current_user »? – moritz

+0

juste après user.tasks.create -> quand la tâche est construite – Karan

+0

Ah non, je veux dire comment choisissez-vous le premier utilisateur: Premier en DB, le plus tôt created_at, etc.? – moritz

Répondre

0

Vous pouvez essayer de faire cela dans un rappel before_add sur votre association, quelque chose comme

class User < ActiveRecord::Base 
    has_many :tasks, :through => :task_table, :before_add => Proc.new { |u,t| t.current_user = u } 
end 
Questions connexes