我应该如何为Rails中的列中的唯一数组值定义约束?

时间:2016-09-16 00:10:40

标签: ruby-on-rails-4 rails-activerecord rails-migrations rails-postgresql

我正在尝试在我的Rails CRM应用程序中存储一些潜在客户。以下是领导模型示例。

class Lead < ActiveRecord::Base
  belongs_to :campaign
  validates_presence_of :name
end

以下是我用于将我的潜在客户存储在数据库中的示例迁移。

class CreateLeads < ActiveRecord::Migration
  def change
    create_table :leads do |t|
      t.string :name,          null: false, default: ""
      t.string :contacts,      null: false, array: true, default: []
      t.string :emails,        null: false, array: true, default: []
      t.string :budget,        null: false, default: "Not Specified"
      t.string :requirements,  null: false, array: true, default: []
      t.timestamps null: false
    end
  end
end

我的潜在客户可能有多个电子邮件地址,联系电话和要求。因此,我决定将前面提到的colums实现为数组。

我想确保没有任何潜在客户的电子邮件地址或联系人用于在数据库中创建新的潜在客户行。

我应该使用模型还是通过迁移来实现?请指导我如何实现这种导轨方式。

1 个答案:

答案 0 :(得分:0)

我根本不喜欢你的实现方法,它只是在以后寻找麻烦:表中的数组 - 请尽可能避免。我不认为这种情况需要它。

让自己变得轻松:您应该使用另一个表来获取潜在客户电子邮件地址。即emails_table。列:id,lead_id和电子邮件。并通过lead_id外键链接。然后,当创建新的潜在客户时,您必须通过检查该电子邮件表是否已存在该电子邮件地址来验证该潜在客户。所以是的,我的建议是使用模型,而不是迁移。