je les modèles suivantsRails 3: Many-to-Many relation avec la condition
class Project < ActiveRecord::Base
has_many :project_members
has_many :members, :through => :project_members, :uniq => true,:class_name => "User", :source => :user
has_many :admins, :through => :project_members, :uniq => true, :conditions => ['project_members.admin = ?', true], :class_name => "User", :source => :user
end
class User < ActiveRecord::Base
# References
has_many :project_members
has_many :projects, :through => :project_members
end
et la table de jointure
class ProjectMember < ActiveRecord::Base
belongs_to :project
belongs_to :user
end
Les relations semblent fonctionner, mais quand je veux ajouter un admin à un projet via ce code
project.admins.push(u)
project.save
(où vous êtes un utilisateur), il enregistre le nouveau relation, mais sans mettre admin à true dans la table de jointure.
Même si je récupère cette relation du projet et la mise en administration à true manuellement en faisant
project.project_members.first.admin = true
et sauver le projet, il doens't mettre à jour l'attribut dans la table.
Qu'est-ce que je fais mal? (S'il vous plaît gardez à l'esprit que je suis un débutant total avec ruby et rails)
J'ai été googling pour les dernières heures pour trouver une solution, mais ne pouvais rien trouver:/
Ne vous attendez pas à trop de magie de la part de Rails. Sur "sauvegarder le projet, il ne met pas à jour l'attribut dans la table": les sauvegardes ne sont pas mises en cascade (elles ne le font que lors de la création). –