先进的ruby on rails模型和验证

时间:2014-06-13 08:25:48

标签: ruby-on-rails

总的来说,我的网站需要有复杂的注册流程。在该注册过程中,我需要在数据库中包含4个表。

现在......我无法逐个验证模型并在数据库中输入其中的4个。有没有办法在一个模型中制作所有这些表的公共点?

让我们说: User模型包含列:username, name等。 Package模型具有:type, account_number

在注册过程中,我需要包含用户名,名称,account_number并验证它们。怎么做?

3 个答案:

答案 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_accessormodules的集合。

这意味着您加载的每classes只是一个model,其中已填充了一系列class / getter方法。这些方法由数据表列中的setter定义,这也是您可以调用ActiveRecord

的原因

神奇的是,如果你使用@user.attribute,你基本上会在你的attr_accessor模型中创建自己的属性 - 这些属性不会保存在数据库中,但会被视为另一个您的对象具有的属性,允许您验证它们

答案 1 :(得分:1)

由于您的注册过程似乎很复杂,我会更进一步作为虚拟属性并使用表单对象

7 Patterns to Refactor Fat ActiveRecord Models

LA Ruby Conference 2013 Refactoring Fat Models

ActiveModel Form Objects

答案 2 :(得分:1)

我了解您的多步注册。您不应该仅因为您的视图页面需要它而创建4个模型。你应该:

  1. User模型中删除验证并在每个表单上添加验证
  2. 创建4种不同的表单(例如,由ActiveModel或用户gem reform扩展)
  3. 为每个表单添加验证
  4. form.valid?将部分用户信息保存到@user对象
  5. 之后

    多数人。