0

我想编写一个创建一堆几乎重复的记录的方法,只需更改一个或两个参数。我将制作一个表单来控制这些参数,我只是想知道如何最好地编写该方法,以及将其保存在哪里。

目前在我的document.rb我写过这个:

def self.publish(brand, components, template)
  brand.users.each do |user|
    Document.create(:component_ids => components, :message => 'Message.', :template_id => template.id, :user_id => user.id)
  end
end

不过感觉不太对。有一个更好的方法吗?

4

1 回答 1

1

如果您的安全模型允许通过在模型中提及的方式批量分配所有这些字段,则此代码很好attr_accessible。如果没有,那么你最好使用create. 此外,如果 Document、Template 和 User 是 ActiveRecord 实例,您应该让 Rails 管理 id 的详细信息。

def self.publish(brand, components, template)
  brand.users.each do |user|
    Document.create do |doc|
      doc.component_ids = components, 
      doc.message 'Message.', 
      doc.template = template, 
      doc.user = user
    end
  end
end

最后一点是component_ids必须序列化以存储列表。这可能是您的模型设计中的一个缺陷。更好的方法是(可能)指定组件belongs_to用户和用户has_many组件。即组件包含用户的外键。如果一个组件需要同时属于许多用户,那么您将需要has_and_belongs_to_manyhas_many ... throughRails 关系指南更详细地描述了所有这些。

建立正确的关系后,代码将变为:

def self.publish(brand, components, template)
  brand.users.each do |user|
    Document.create do |doc|
      doc.components = components,  # Components is now a list of active records.
      doc.message 'Message.', 
      doc.template = template, 
      doc.user = user
    end
  end
end

生成的 SQL 将正确填写所有外键和(如有必要)关系表。

于 2013-08-27T01:33:56.463 回答