0

要在 Rake 任务 curretnyl 中填充一些示例数据,我有这样的方法:

def create_population_summaries
  PopulationSummary.where(year: 2009).first_or_create(member_count: 12, organization_id: 1)
  PopulationSummary.where(year: 2010).first_or_create(member_count: 5, organization_id: 1)
  PopulationSummary.where(year: 2011).first_or_create(member_count: 99, organization_id: 1)
  PopulationSummary.where(year: 2008).first_or_create(member_count: 52, organization_id: 1)
  PopulationSummary.where(year: 2012).first_or_create(member_count: 30, organization_id: 1)
  PopulationSummary.where(year: 2013).first_or_create(member_count: 25, organization_id: 1)
  PopulationSummary.where(year: 2008).first_or_create(member_count: 46, organization_id: 1)
end

所以这意味着有一个 PopulationSummary 表,其中包含如下列

member_count
year
organization_id

我们已经用老板的数据填充了它们!给了我。

现在我想以某种方式重构它,它使用一些 Ruby 结构,如哈希、数组,甚至哈希数组等......这样在重构后我的方法不包括方法中的那些手动输入的数据和那些手动输入的数据应该来自那个 Ruby 结构、哈希等...仍然在我可以手动输入数据库字段名称的方法中,例如 year、member_count 等...但是我想从中读取的值红宝石数据结构..

您建议如何编写该数据结构?

4

3 回答 3

1
data = [{'year'=>2009, 'members'=>12}, {'year'=>2010, 'members'=>5}....]

然后循环

data.each do |d|
  PopulationSummary.where(year: d['year']).first_or_create(member_count: d['members'], organization_id: 1)   
end
于 2013-02-16T17:51:04.643 回答
1

怎么样的东西:

DATA = [[ 2009, 12, 1], 
        [ 2010,  5, 1], 
       ... ]

DATA.each do |d|
  PopulationSummary.where(year: d[0]).first_or_create(member_count: d[1], organization_id: d[2])
end
于 2013-02-16T17:56:22.277 回答
1

只是出于好奇,您可以将元编程(业务规则,来自老板)和总体本身完全分开:

data = [ {
           'year'=>2009,'members'=>12,'organization_id'=>1
         }, {
           'year'=>2010,'members'=>5,'organization_id'=>1
         }, {
           …
       } ]

然后填充:

data.each do |d| 
  d.inject (PopulationSummary) do |rec, val|
    rec.where val
  end.first_or_create
end

但恐怕几个月后老板会带来新的数据部分,你会讨厌这个提示。

于 2013-02-17T01:02:27.707 回答