2

每次我在 Rails 中创建新的公司记录时,我都需要在该公司添加一些默认(空白)联系人记录。Front Desk、Receiving、HR、IT等等……除了名字,他们里面不会有任何数据,只是一个占位符,供用户以后填写。

所以,我的公司模型 has_many contacts,并且 contacts belongs_to company。联系人记录是静态的,并且对于添加的每个新公司都是相同的,但我需要使用数据预先填充联系人表,因此我的用户不必这样做。

我已经阅读了很多关于为数据库播种的内容,但是每次用户动态创建公司时我都无法使用终端,并且它需要动态绑定到该公司,记录不是不可知的。播种似乎不是正确的事情。这应该怎么做?

4

3 回答 3

3

您应该使用before_save过滤器来检查属性是否为空,否则将其设置为默认值。

使用before_savewill 防止以后被删除。

但请注意,仅对永远不会为空的字段执行此操作。

 class Company < ActiveRecord::Base
   has_many :contacts

   before_save :add_defaults

   def add_defaults
     contacts ||= Contact.default_list  # this only sets it if it's nil
     # you can implement Contact#default_list as a method, or as a scope in the contacts model
   end
 end
于 2013-05-17T18:04:03.700 回答
1

Model 中的after_create回调呢Company

像这样:

class Company < ActiveRecord::Base
  has_many :contacts

  after_create :add_contacts

  def add_contacts
    contacts.create(name: "Some name", phone: "...", ....)
  end
end
于 2013-05-17T18:00:28.607 回答
0

虽然它名义上是用于生成测试数据,但 FactoryGirl gem 对此非常有用。将它与after_save此处提到的方法结合使用,您将有一个很好的地方来集中定义您的空白记录。

于 2013-05-17T19:41:07.783 回答