因此,我正在尝试实施批量导入,即文本区域,人们可以在其中以“金额卡名”的形式编写卡片列表。然后Rails占用每一行,找到金额和卡片名称(该部分正在工作)并将其添加到数据库(此部分不起作用)。
我的数据库:
关系
> cards_bulk.each_line do |line| > card_data = /(^\d.?\s)(.+)/.match(line) > end
此代码遍历文本区域内容并正则表示正确的部分,因此我在card_data [0]中有我的金额,在card_data [2]中有我的名字。
现在我想将该卡添加到此用户的手中。如果它已经存在,我想将金额添加到它已有的金额。如果它不存在,我想创建它并将其数量设置为给定的数量。我不太确定我会怎么做。
由于
答案 0 :(得分: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
答案 1 :(得分: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