如何为具有范围批量分配的 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 应用程序播种的主要内容,如果未能解决你的问题,请参考以下文章