总的来说,我的网站需要有复杂的注册流程。在该注册过程中,我需要在数据库中包含4个表。
现在......我无法逐个验证模型并在数据库中输入其中的4个。有没有办法在一个模型中制作所有这些表的公共点?
让我们说:
User
模型包含列:username, name
等。
Package
模型具有:type, account_number
等
在注册过程中,我需要包含用户名,名称,account_number并验证它们。怎么做?
答案 0 :(得分:2)
如果没有看到你的模型结构,这只是推测,但这里有:
-
虚拟属性
在User
模型中,您可以使用attr_accessor
创建一组virtual attributes
- 这基本上意味着您可以在{{{{{}}中创建一系列setter / getter
方法1}}模型。
虽然我认为这不会直接帮助您,但它应该让您了解如何创建单一模型验证:
User
这将允许您在#app/models/user.rb
Class User < ActiveRecord::Base
attr_accessor :new, :values, :to, :validate
validates, :new, :values, :to, :validate, presence: true
end
模型中创建属性 - 虽然它们不会被保存,但您可以使用它们进行验证
<强> User
强>
为了让您快速了解此方法,首先需要记住Rails只是attr_accessor
和modules
的集合。
这意味着您加载的每classes
只是一个model
,其中已填充了一系列class
/ getter
方法。这些方法由数据表列中的setter
定义,这也是您可以调用ActiveRecord
神奇的是,如果你使用@user.attribute
,你基本上会在你的attr_accessor
模型中创建自己的属性 - 这些属性不会保存在数据库中,但会被视为另一个您的对象具有的属性,允许您验证它们
答案 1 :(得分:1)
由于您的注册过程似乎很复杂,我会更进一步作为虚拟属性并使用表单对象
7 Patterns to Refactor Fat ActiveRecord Models
答案 2 :(得分:1)
我了解您的多步注册。您不应该仅因为您的视图页面需要它而创建4个模型。你应该:
User
模型中删除验证并在每个表单上添加验证ActiveModel
或用户gem reform
扩展)form.valid?
将部分用户信息保存到@user
对象多数人。