设计的未知属性

时间:2011-07-03 00:37:22

标签: ruby-on-rails ruby-on-rails-3 activerecord devise

对于我的数据模型,我有两种不同的类型:家庭成员和朋友。我的计划是每个都有一个用户表的外键,由Devise创建。因此,当用户注册时,我希望他们转到/ friends / sign_up或family_members / sign_up。所以,我的朋友班是

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

我的用户类是

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

我也在使用Formtastic作为我的观点。 现在,我正在

unknown attribute: username

带参数

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

现在,我只是随机尝试将nested_attributes添加到两个模型中。我可以使用table inhertence,但我不愿意(除非我可以在指向超类的子类中添加一个外键,这样会很好)。

3 个答案:

答案 0 :(得分:2)

好的,我已经解决了我的问题。这是我的新代码供将来参考:

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

答案 1 :(得分:0)

尝试将此添加到您的朋友模型中:

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

你有没有试过这样的事情:

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

答案 2 :(得分:0)

您确定在用户迁移中添加了“用户名”字段吗?设计不会自动添加。