ruby-on-rails – 用于轨道中多类型注册的多态关联
发布时间:2020-12-17 02:14:14 所属栏目:百科 来源:网络整理
导读:我正在使用devise进行应用程序身份验证.我有一个用户模型,它是登录/注册模型. 该功能是这样的:当客户端即用户注册时,他将被用来填写强制用户配置文件页面.使用设计一切都很好. 现在我有一个新功能,用户可以是不同类型(比如A,B,C) 如果用户是A类型,那么他必
我正在使用devise进行应用程序身份验证.我有一个用户模型,它是登录/注册模型.
该功能是这样的:当客户端即用户注册时,他将被用来填写强制用户配置文件页面.使用设计一切都很好. 现在我有一个新功能,用户可以是不同类型(比如A,B,C) 如果用户是A类型,那么他必须遵循相同的注册过程和相同的个人资料页面. 如果用户是B类型,则注册屏幕会有所不同,等待管理员验证. C型也有不同的变化. 所有不同类型都有不同的个人资料页面,字段不同. 所以我决定有一个多态关联,这就是我的模型的样子 class User < ActiveRecord::Base devise :database_authenticatable,:registerable,:recoverable,:rememberable,:trackable,:validatable attr_accessible :email,:password,:password_confirmation,:remember_me belongs_to :user_type,:polymorphic => true end class A has_one :user,:as => :user_type end class B has_one :user,:as => :user_type end class C has_one :user,:as => :user_type end 我只是想知道这是解决方案的正确方法还是有更好的方法来实现这个? 解决方法
你想要Rails的魔法类型列.
# user.rb class User < ActiveRecord::Base # create_table 'users' do |t| # t.string :name # t.string :type # end end # user_a.rb class UserA < User end # user_b.rb class UserB < User end # user_c.rb class UserC < User end UserA.create(name: "bricker") user_a = User.where(type: "UserA").first same_user_a = UserA.all.first user_a == same_user_a #=> true user_a.class #=> UserA user_a.is_a? User #=> true 更新 class UserLogin < ActiveRecord::Base # create_table :user_logins do |t| # t.integer :user_id # t.string :user_type # t.string :login # t.string :encrypted_password # end # devise ... belongs_to :user,polymorphic: true end class User < ActiveRecord::Base self.abstract_class = true has_one :user_login,as: :user end class Admin < User # create_table :admins do |t| # t.integer :user_login_id # t.string :admin_name # end end class Moderator < User # create_table :moderators do |t| # t.integer :user_login_id # t.string :moderator_name # end end (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |