【问题标题】:Creating a profile for users model in rails在 Rails 中为用户模型创建配置文件
【发布时间】:2012-07-22 18:28:07
【问题描述】:

我的 rails 应用程序中有一个用户模型。它只有一个名称属性以及添加到它的电子邮件和密码,以便通过设计登录。我想为用户创建一个模型配置文件。我将如何创建它。通过将配置文件属性添加到现有用户模型或通过创建模型配置文件并向其添加belongs_to 关联。

【问题讨论】:

  • 个人来说,如果profile数据比较稳定,我会创建一个profile模型,然后给它添加belongs_to,或者给users添加has_one。

标签: ruby-on-rails


【解决方案1】:

向您的用户模型添加更多属性会使您的用户对象有点沉重,并且考虑到您会经常调用该对象,这不是最好的主意。例如,要验证用户,您不需要像 current_user 帮助程序那样加载位置或出生日期等配置文件属性。因此,最好在单独的模型中提取配置文件属性并采用 gabreilhilal 的任何一种方法。

【讨论】:

    【解决方案2】:

    嗯,这取决于你的要求。

    如果一个用户只能有一个profile,而您只是要添加一些与user相关的属性,则没有理由为其创建一个新类。

    但是,即使一个用户只能拥有一个个人资料,您也可能需要做一些normalisations。如果是这样,您可能会从users 表中删除一些属性以创建一个表profiles,并且您将拥有一对一的关系。

    class User < ActiveRecord::Base
      has_one :profile
    end 
    
    class Profile < ActiveRecord::Base
      belongs_to :user
    end 
    

    嗯...根据您的要求,您可能会遇到用户可能拥有多个个人资料的情况。如果是这样:

    class User < ActiveRecord::Base
      has_many :profiles
    end 
    
    class Profile < ActiveRecord::Base
      belongs_to :user
    end 
    

    总而言之,没有对错之分……这取决于您的要求以及您的设计决策。

    【讨论】:

    • 是否可以创建配置文件模块并将其包含到用户模型中,因为我想为不同类型的用户创建配置文件,例如学生、老师、校长,它们有一些共同的属性,也有一些不同的属性?
    • 不是真的...您可以在其他情况下使用模块和继承。例如,如果您有以下类:studentteacherstaff 等。它们都有 comum 中的东西,如nameage 等。并且与其他表的关系是不同的。在这种情况下,您可以使用模块或继承来避免在每个类中添加所有 comum 属性。但是,在您的情况下,我认为您不需要它..您只需添加属性type 即可指定访问级别(我认为这是您想要的)。因此,如果 current_user 的类型为 student,您可以阻止某些操作...
    • 但是,如果studentteacherprincipal 具有不同的行为,那么...那么您应该考虑不同的类...
    猜你喜欢
    • 2012-12-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-12
    • 1970-01-01
    • 1970-01-01
    • 2017-05-12
    • 1970-01-01
    相关资源
    最近更新 更多