如何为具有范围批量分配的 Rails 3.1 应用程序播种

Posted

技术标签:

【中文标题】如何为具有范围批量分配的 Rails 3.1 应用程序播种【英文标题】:How to seed a Rails 3.1 app with scoped mass assignment 【发布时间】:2011-09-20 00:35:04 【问题描述】:

Rails 3.1 (RC4) 和 scoped mass assignment 希望我们在加载数据列表时使用 seed.rb。

例如。我通常有类似的东西:

City.create([
   :name => 'Chicago' , 
   :name => 'Copenhagen' , 
  ...
]) 

创建了 100 多个城市。这不再起作用,因为 City 模型具有范围内的质量分配 :as => :admin

据我所知,.create() 方法不允许我们抛出:as => :admin。 只有.new().update_attributes() 允许我们使用:as => :admin 执行此操作。

所以做类似(下面)的事情很麻烦(尤其是对于 100 多条记录):

city1 = City.new( :name => 'Chicago' , :as => :admin)
city1.save
city2 = City.new( :name => 'Copenhagen' , :as => :admin)
city2.save

对此有什么想法吗?

【问题讨论】:

【参考方案1】:

您可以执行以下操作:

City.create([
   :name => 'Chicago' , 
   :name => 'Copenhagen' , 
  ...
], :without_protection => true) 

这完全覆盖了批量分配保护 - 所以请确保只在种子中使用它。

【讨论】:

以上是关于如何为具有范围批量分配的 Rails 3.1 应用程序播种的主要内容,如果未能解决你的问题,请参考以下文章

我应该如何为具有两个范围条件的查询建立索引?

如何为ggplot2中具有稳定映射的分类变量分配颜色?

Rails:如何为 AWS Elasticbeanstalk 应用程序获取 puma 3.11?

如何为 Rails 控制器添加延迟以进行测试?

如何为 Rails 中枚举中列出的角色添加模型?

Rails 4 的 Rails_admin 批量分配错误