Ruby on rails 从中查找或按属性初始化

Ruby on rails 从中查找或按属性初始化,ruby-on-rails,ruby-on-rails-3,activerecord,Ruby On Rails,Ruby On Rails 3,Activerecord,因此,我正在尝试实现批量导入,即文本区域,人们可以在其中以“amount cardname”的形式编写卡片列表。然后Rails获取每一行,查找金额和卡名(该部分正在工作)并将其添加到数据库中(该部分不工作) 我的数据库: 卡片(身份证、姓名)-已经填写,我不想在这里创建任何内容 用户(id、名称) haves(身份证、身份证、用户身份证、金额) 关系 用户有很多优点 卡有很多优点 拥有属于卡和用户的 >卡片批量。每行做一行| >卡片数据=/(^\d.?\s)(.+)/.match(行)

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

我的数据库:

  • 卡片(身份证、姓名)-已经填写,我不想在这里创建任何内容
  • 用户(id、名称)
  • haves(身份证、身份证、用户身份证、金额)
关系

  • 用户有很多优点
  • 卡有很多优点
  • 拥有属于卡和用户的
>卡片批量。每行做一行| >卡片数据=/(^\d.?\s)(.+)/.match(行) >结束 这段代码遍历文本区域内容,并对正确的部分进行正则化,这样我就可以在card_数据[0]中记录我的金额,在card_数据[2]中记录我的卡名

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


谢谢

您只需执行以下操作:

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

你可以使用新的记录吗?救援人员

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
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