Ho installato un sistema di accesso controll ruolo in base con i seguenti modelli:È possibile creare un'associazione condizionale nel modello?
- ruolo (come STI),
- UserRole (ruoli globali) (ruoli specifici di progetto)
- ProjectRole
- Assegnazione (Polimorfa con risorse diverse)
- Utente
- Proj ect (come un tipo di risorsa per incarichi)
Gli utenti possono essere responsabili di un progetto solo se hanno un UserRole specifico. Questo Userrole è il nome "responsabile dei progetti" e ha l'ID 2.
Nel modello Utente ci sono due associazioni has_many: responsible_assignments e responsible_projects. Queste associazioni sono valide solo se l'utente ha il UserRole "responsabile dei progetti" con ID 2.
E 'possibile creare un'associazione condizionale nel modello utente per associazione responsabile_ * ed è un modo comune per configurare questo tipo delle relazioni?
Qual è la migliore pratica per risolvere questo tipo di problemi?
class Role < ActiveRecord::Base
has_many :assignments
has_many :users, :through => :assignments
class UserRole < Role
class ProjectRole < Role
class Assignment < ActiveRecord::Base
belongs_to :user
belongs_to :role
belongs_to :resource, :polymorphic => true
class User < ActiveRecord::Base
has_many :assignments
has_many :roles, :through => :assignments,
:class_name => "UserRole"
has_many :responsible_assignments, :class_name => "Assignment",
:conditions => { :role_id => 4 } // specific project role
has_many :responsible_projects, :through => :responsible_assignments,
:source => :resource,
:source_type => 'Project',
:conditions => { :status => 1 } // project is active
...
class Project < ActiveRecord
...
Cosa vuoi dire da un'associazione condizionale ? Quali sono le condizioni? – Yanhao
La condizione è: se un utente non ha un ruolo con id 2, le associazioni responsabile_ * non sono valide/non dovrebbero essere impostate. – tonymarschall