我正在建立一个功能,当一个人注册一个帐户时,我们会自动使用默认类别和项目填充他们的帐户以启动它们。
此外,他们可以选择购买其他类别集,以便随时添加/填充其帐户。
我在想我的选择是:
1)以某种方式使用seeds.rb 2)将这些记录存储在YAML文件中,并在创建帐户时加载 3)将这些记录作为默认设置存储在数据库中并克隆/复制它们。
任何帮助都赞赏w /代码示例让我开始。
答案 0 :(得分:0)
这就是我要做的:
在数据库中有一个标记以标识first_sign_in
将数据存储在yaml
文件中(例如db/users.yml
)并执行:
def populate_user
user.update_attributes(YAML.load(Rails.root + 'db/users.yml')) if first_sign_in == 0
end
然后您可以将其添加到after_create
挂钩,以便仅在创建user
时调用它
答案 1 :(得分:0)
我会采用不同的方式。我在控制器和模型之间有一个“注册”表单对象。在首次构建用户的同时构建一些默认类别和项目。如何隔离这些默认项的属性取决于它们的复杂程度。如果它们很简单,表单对象中的默认哈希就足够了,如果它们很复杂,你可以从YML中获取。
当我在过去完成此操作时 - 有一个需要多个对象创建的注册我有一个RegistrationsController
,一个RegistrationForm
对象,它接受参数并验证所有内容,并且也是负责知道保存什么,有时在中间Registrar
对象(通常是Struct)中,它具有回调的所有逻辑。 registrations_controller
初始化registrar
,发送消息register(registration_form)
。
从长远来看,这会导致职责分离和更清晰的代码。
答案 2 :(得分:0)
提供的答案是明确的选择,我试验过。但是,我决定走另一条路。我意识到我需要管理这些模板'记录和数据库最容易。
1)我在桌面上设置了一个列' is_template'标记将用于为其他帐户设定种子的记录。
2)创建了一个after_create
回调,使用这些记录为帐户播种。
3)为了方便起见,我使用了amoeba gem,它允许我复制记录及其相关记录,因为它们中的一些具有has_many
关系。
到目前为止,这项工作一直很顺利 - 我也有办法让自己和非技术人员更新记录。