2011-07-03 5 views
4

Pour mon modèle de données, j'ai deux types différents: les membres de la famille et les amis. Mon plan est d'avoir chacun une clé étrangère à une table utilisateur, qui est créée par Devise. Donc, quand un utilisateur s'inscrit, je veux qu'il se rende à/friends/sign_up ou family_members/sign_up. Alors, ma classe d'ami estattribut inconnu avec concevoir

class Friend < ActiveRecord::Base 
    belongs_to :label 
    belongs_to :user 
    belongs_to :gender 
    belongs_to :location 
    belongs_to :orientation 
    belongs_to :matchmaker 

    def after_initialize 
    self.build_user if self.user.nil? 
    end 
    #accepts_nested_attributes_for :user 
    delegate :username, :to => :user 
    delegate :email, :to => :user 
    delegate :password, :to => :user 
    delegate :password_confirmation, :to => :user 
    delegate :rememebr_me, :to => :user 

    # Include default devise modules. Others available are: 
    # :token_authenticatable, :encryptable, :confirmable, :lockable, :timeoutable and :omniauthable 
    devise :database_authenticatable, :registerable, 
     :recoverable, :rememberable, :trackable, :validatable 
    # Setup accessible (or protected) attributes for your model 
    attr_accessible :username, :email, :password, :password_confirmation, :remember_me 
end 

et ma classe User est

class User < ActiveRecord::Base 
    # Include default devise modules. Others available are: 
    # :token_authenticatable, :encryptable,  :confirmable, :lockable, :timeoutable and :omniauthable 
# devise :database_authenticatable, :registerable, 
#   :recoverable, :rememberable, :trackable, :validatable 

    attr_accessor :username, :email, :password, :password_confirmation, :remember_me 
    # Setup accessible (or protected) attributes for your model 
    attr_accessible :username, :email, :password, :password_confirmation, :remember_me 
end 

J'utilise aussi Formtastic pour moi. En ce moment, je me fais

unknown attribute: username 

avec des paramètres

{"utf8"=>"✓", "authenticity_token"=>"8ScsJebuCWnflaRQkp9MsBuaaqfzQKaZBXotLyNwNyM=", 
"friend"=>{"username"=>"aaaa", 
"email"=>"[email protected]", 
"password"=>"[FILTERED]", 
"password_confirmation"=>"[FILTERED]"}, 
"commit"=>"Create Friend"} 

En ce moment, je suis juste essayer au hasard d'ajouter nested_attributes et quel que soit les deux modèles. Je pourrais utiliser l'héritage de table, mais je préférerais ne pas le faire (à moins que je puisse ajouter une clé étrangère aux sous-classes pointant sur la superclasse, ce serait bien).

Répondre

0

Essayez d'ajouter ceci à votre modèle de votre ami:

attr_accessible :username, :email, :password, :password_confirmation, :remember_me 

Avez-vous essayé de faire quelque chose comme ceci:

class User < ActiveRecord::Base 
    devise :database_authenticatable, :registerable, 
     :recoverable, :rememberable, :trackable, :validatable 
end 

class Friend < User 
    belongs_to :label 
    belongs_to :user 
    belongs_to :gender 
    belongs_to :location 
    belongs_to :orientation 
    belongs_to :matchmaker 
end 

class FamilyMember < User 
end 
+0

Je l'ai en fait dans mon code, je viens de faire un mauvais travail de pâte de copie. – me2

0

Êtes-vous sûr que vous avez ajouté champ « nom d'utilisateur » à la migration des utilisateurs? La devise n'ajoute pas automatiquement.

+0

btw design-sage probablement il serait préférable de garder toute la logique concevoir dans le modèle de l'utilisateur et de le mettre à jour de sorte qu'il has_one ou appartient à friend/family_member - mais cela dépend de la situation bien sûr :) –

2

Ok, j'ai résolu mon problème à ma satisfaction. Voici mon nouveau code pour référence future:

class Friend < ActiveRecord::Base 
    belongs_to :friend_user, :class_name => 
end 

class FriendUser < User 
    set_table_name :users 
    has_one :friend 
end 
class User < ActiveRecord::Base 
    # Include default devise modules. Others available are: 
    # :token_authenticatable, :encryptable, :confirmable, :lockable, :timeoutable and :omniauthable 
    devise :database_authenticatable, :registerable, 
     :recoverable, :rememberable, :trackable, :validatable 

    # Setup accessible (or protected) attributes for your model 
    attr_accessible :username, :email,  :password, :password_confirmation, :remember_me 
end 
Questions connexes