如果您的安全模型允许通过在模型中提及的方式批量分配所有这些字段,则此代码很好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_many或has_many ... through。Rails 关系指南更详细地描述了所有这些。
建立正确的关系后,代码将变为:
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 将正确填写所有外键和(如有必要)关系表。