【问题标题】:How to set or assign predefined attributes to new user, on Rails如何在 Rails 上为新用户设置或分配预定义属性
【发布时间】:2012-09-21 16:07:34
【问题描述】:

首先,如果这是一个新手问题,我深表歉意。我只能在业余时间编码,所以我经常在每个项目中从头开始重新学习。

我有一个类Person,具有namebirth-dategender 属性,所以我可以创建一个24 岁的男性Michael 和一个17 岁的Belinda -老女性。

但是,还有其他隐藏的预定义属性应该根据年龄和性别自动分配给这些人。它们不是由人在创建时定义的,用户以后也不能编辑。

因此,例如,我们可以有隐藏属性favorite-bookfavorite-movie,它们会根据Person 是18 岁以下的男性、18-40 岁的男性还是18 岁以上的男性而有所不同40;或 18 岁以下的女性、18-40 岁的女性或 40 岁以上的女性。

我应该怎么做?我是否应该在Person 配置文件中创建这些属性,但不在界面上显示它们,而是根据输入自动填写它们?或者将这些其他属性创建为“类别”之类的东西,并将人员分配给其中一个?请记住,我必须经常在界面中使用此信息,并且人们应该随着年龄的增长自动更改组。

另外,在 Rails 中如何做到这一点?有人告诉我“使用哈希”,但我不清楚这种方法的具体细节。

【问题讨论】:

    标签: ruby-on-rails attributes user-profile


    【解决方案1】:

    我认为您的第一个建议应该可以正常工作“在人员配置文件中创建这些属性,但不在界面上显示它们,而是根据输入自动填写它们”。除非您试图说明这些额外数据是否复杂或庞大,否则将其存储在 Person 模型中应该没问题。类似这样的实现如下所示:

    class Person < ActiveRecord::Base
      after_validation :assign_favorites, :on => :create
    
      def assign_favorites
        if self.age < 18 && self.sex == 'male'
          self.favorite_book = 'Hunger Games'
        elsif self.age >= 18 && self.sex == 'male'
          ...
        end
      end
    end
    

    【讨论】:

    • 感谢您的回复。实际上有 30 多个属性,但我认为这不是问题,因为它们只有一个字长,而我只需要做一次。这种方法让我担心的是,我看不到如何随着人们年龄的增长而自动更新。也许如果不是“创建时”,而是发生在视图中。
    • 您可以删除 :on =&gt; :create 部分,这意味着它将在创建或更新时运行。然后你可以设置一个 cronjob 来每天遍历所有记录并保存它们。如果它们发生变化,这将每天重新分配一次值。
    猜你喜欢
    • 2017-01-12
    • 1970-01-01
    • 2012-03-24
    • 1970-01-01
    • 2010-09-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多