2010-09-02 7 views
2

donc dans les rails, en utilisant enregistrement actif, nous pouvons avoir plusieurs modèles héritant utilisateurunique Héritage de Table Ruby on Rails

classe de base - Utilisateur Sous-classe - Employé, gestionnaire, superviseur

Ainsi, dans des rails Nous n'utilisons qu'une seule table lorsque vous créez un nouvel employé et lorsque vous essayez d'accéder à Employee.salary, même si seuls les gestionnaires et les superviseurs doivent avoir accès à ces attributs. Comment protégez-vous ceux-là? Méthodes Attr?

Merci à l'avance.

Répondre

2

J'ai mis en place STI dans un projet il y a longtemps. J'oublie les détails maintenant mais voici un code de ce projet qui pourrait aider. Ceci vient de Rails 2.3.4. Vous ne savez pas à quoi cela ressemblerait dans Rails 3. Par défaut Rails avec une colonne de type appelé est là pour des fins d'héritage Single Table Table. Si vous avez besoin de spécifier, utilisez "set_inheritance_column" comme vous le voyez ci-dessous. Je ne me souviens pas d'avoir été en mesure de protéger les attributs d'une sous-classe des autres sous-classes. Comme vous l'avez mentionné, tout est stocké dans la même table. Je pense que j'ai essayé à l'époque et je ne pouvais pas mais j'étais très nouveau à Rails à l'époque. Je pense qu'il pourrait être faisable avec attr_accessable ou quelque chose sur la sous-classe. J'ai peut-être tort, mais essayez-le.

class User < ActiveRecord::Base 
    set_inheritance_column :user_type 
    attr_protected :user_type 
end 

class BusinessOwner < User 
    has_many :businesses 
end 

class SiteUser < User 
end 

à partir du schéma:

create_table "users", :force => true do |t| 
    t.string "user_type" 
    t.string "username" 
    t.string "email" 
    t.integer "location_id" 
... 
end