【问题标题】:Loop to create multiple records in Model循环在模型中创建多条记录
【发布时间】:2013-03-12 14:38:19
【问题描述】:

我正在使用 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 数据?)。如何将客队的属性与主队的属性一起传递?

这都是非常新的,因此我们感谢您提供的任何帮助

【问题讨论】:

  • 为什么两者都发布相同的数据?在 get_fixtures 方法中,home_teamaway_team 变量有不同的赋值,所以数据应该不同。
  • 我不确定,所以我的方法正确吗?我为主队和客队发布了相同的数据,所以 (H)Man Utd (A)Manutd。

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


【解决方案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

【讨论】:

  • 是的,有道理,把它拆分出来,让每个单独的方法,我想我太聪明了,保持简单,非常感谢
  • 嗯,现在只有客队更新
  • 任何关于为什么它只会写入一列的想法
  • 可以一次性创建为:Fixture.create(home_team: home, away_team: away)}。为此,请使用get_fixtureshome_team = doc.css(".team-home.teams").map {|h| h.text.strip }away_team = doc.css(".team-away.teams").map {|a| a.text.strip }. 之类的通用方法,但不要像以前对两者一样使用通用match
  • 不,这似乎也不起作用,它如何知道 create 命令中的 home 和 away 是什么?
猜你喜欢
  • 2021-11-13
  • 1970-01-01
  • 2020-03-11
  • 1970-01-01
  • 2018-07-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多