0

所以,我正在尝试实现批量导入,即一个文本区域,人们可以在其中以“金额卡名”的形式编写他们的卡列表。然后 Rails 获取每一行,找到金额和卡名(该部分有效)并将其添加到数据库中(该部分无效)。

我的数据库:

  • 卡片(id,name) - 已经填写,我不想在这里创建任何东西
  • 用户(ID,姓名)
  • 拥有(id、card_id、user_id、金额)

关系

  • 用户 has_many hass
  • 卡 has_many haves
  • 拥有belongs_to卡和用户
> card_bulk.each_line 做 |line|
> card_data = /(^\d.?\s)(.+)/.match(行)
> 结束

此代码遍历文本区域内容并正则表达式正确的部分,因此我的金额在 card_data[0] 中,我的卡名在 card_data[2] 中。

现在我想将该卡添加到该用户的财产中。如果它已经存在,我想将金额添加到它已经拥有的金额中。如果它不存在,我想创建它并将它的数量设置为给定的数量。我不太确定我会怎么做。

谢谢

4

2 回答 2

0

你可以使用new_record吗?救援帮手

card = Card.find_or_create_by_name(card_data[2])
haves = card.haves.find_or_initialize_by_user_id(user)
haves.amount = haves.new_record? ? card_data[0].to_i : haves.amount + card_data[0].to_1
card.save
于 2012-07-29T09:49:21.190 回答
0

你可以简单地这样做:

card = Card.find_or_create_by_name(card_data[2])
haves = Have.find(:card => card, :user => user)
if haves.empty?
  card.haves.create(:amount => card_data[0].to_i, :user => user)
else
  haves.update_attibutes(:amount => (haves.amount + card_data[0].to_i))
end
于 2012-07-29T09:17:01.890 回答