【问题标题】:Ruby on rails with different user types具有不同用户类型的 Ruby on rails
【发布时间】:2010-04-06 16:05:15
【问题描述】:

我正在尝试构建一个具有不同类型用户的应用程序,我正在使用 authlogic 进行用户身份验证。

所以我有一个用户模型,它具有 authlogic 所需的字段来发挥它的魔力。我现在想添加几个不同的模型来描述不同类型用户的额外字段。

假设用户注册,然后他将选择他的用户类型,当他完成注册后,他将能够添加特定于他的用户模型的信息。

最好的方法是什么?我目前正在研究多态模型,但我不确定这是最好的方法。任何帮助将不胜感激,谢谢。

【问题讨论】:

    标签: ruby-on-rails polymorphic-associations


    【解决方案1】:

    您可以创建不同的profile 表并将配置文件与用户联系起来。因此,对于每种用户类型,您可以创建一个表并将特定信息存储在那里,并有一个 user_id 列指向 users

    class User < ActiveRecord::Base
      has_one :type_1
      has_one :type_2
    end
    
    class Type1 < ActiveRecord::Base
      belongs_to :user
    end
    
    class Type2 < ActiveRecord::Base
      belongs_to :user
    end
    

    现在这不是很干,如果您不断添加用户类型,可能会导致问题。所以你可以研究多态性。

    对于多态性,users 表将定义用户的类型(profileable_idprofileable_type)。所以是这样的:

    class User < ActiveRecord::Base
      belongs_to :profileable, :polymorphic => true
    end
    
    class Type1 < ActiveRecord::Base
      has_one :user, :as => :profileable
    end
    
    class Type2 < ActiveRecord::Base
      has_one :user, :as => :profileable
    end
    

    对于用户类型,还有第三个 STI(单表继承)选项。但如果用户类型字段差异很大,则无法很好地扩展。

    【讨论】:

    • 谢谢,这几乎就是我在多态方面所做的,它似乎工作正常,但问题是我终生无法弄清楚如何处理用户选择他的下拉菜单用户类型,我如何链接它以使模型正常工作?
    • 这是一个完全不同的问题 :) 但我会在控制器中手动完成。拥有可用类型的select_tag,然后在创建/更新方法中检查参数,使用适当的类型创建/更新并保存。
    • 非常感谢,我认为这是这样做的方法,但后来我想可能有一种很好的“railsy”方法来做到这一点,呵呵
    • 非常感谢您的回答。虽然我有一个问题,例如,如果使用 Type 1 的用户可以升级到 Type 2 并且可以降级回 Type 1,如何处理?目前我决定在类型 1 中保留填充用户信息的行,而用户正在使用类型 2,这样当用户返回/降级到类型 1 时,他不必重新输入他的信息。这是正确的做法吗
    【解决方案2】:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-04-26
      • 1970-01-01
      • 1970-01-01
      • 2016-08-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-07
      相关资源
      最近更新 更多