循环以在Model中创建多个记录

时间:2013-03-12 14:38:19

标签: ruby-on-rails ruby-on-rails-3 loops models

我正在使用Nokogiri从网页上获取数据,到目前为止我可以保存到模型中的一列

def update_fixtures #rake task method
 Fixture.destroy_all
 get_fixtures.each {|match| Fixture.create(home_team: match )}
end

def get_fixtures # Get me all Home Teams
 doc = Nokogiri::HTML(open(FIXTURE_URL))
 home_team = doc.css(".team-home.teams").map {|h| h.text.strip }
end

我想知道的是同时保存到2,3或4个柱子的最有效方法

作为一个例子,我有另一个名为away_team的专栏,我将以与主队相同的方式对该数据进行评分

away_team = doc.css(".team-away.teams").map {|a| a.text.strip }

建议将它放在get_fixtures方法中吗?然后使用类似

的内容添加到update_fixtures
def update_fixtures #rake task method
 Fixture.destroy_all
 get_fixtures.each {|match| Fixture.create(home_team: match, away_team: match )}
end

尝试此操作后,相同的数据会被发布到主页和离开的列。回读后我可以看到原因(我认为这是因为匹配只是抓住home_team数据?)。我怎样才能将客队的属性与主队一起传递?

这一切都非常新,所以提供的任何帮助都表示赞赏

1 个答案:

答案 0 :(得分:1)

这不是正确的方法,因为变量home_teamaway_team都使用相同的公共match,因此您获得两者的相同数据。

执行以下操作:

更新:

您的型号:

 attr_accessible :home_team, :away_team

 def update_fixtures #rake task method
  Fixture.destroy_all
  doc = Nokogiri::HTML(open(FIXTURE_URL))

  home_team = doc.css(".team-home.teams").map {|h| h.text.strip }
  away_team = doc.css(".team-away.teams").map {|a| a.text.strip }

  Fixture.create(home_team: home_team, away_team: away_team)
 end