0

そこで、私は一括インポート、つまり「amountcardname」の形式でカードのリストを書き込むことができるテキスト領域を実装しようとしています。次に、Railsは各行を取得し、金額とカード名(その部分は機能しています)を見つけてデータベースに追加します(この部分は機能していません)。

私のデータベース:

  • カード(ID、名前)-すでに入力されています。ここでは何も作成しません
  • ユーザー(ID、名前)
  • haves(id、card_id、user_id、amount)

関係

  • ユーザーhas_manyhas
  • カードhas_manyhas
  • カードとユーザーにbelongs_toを持っている
> cards_bulk.each_line do | line |
> card_data = /(^\d.?\s)(.+)/.match(line)
>終了

このコードは、テキスト領域のコンテンツを反復処理し、適切な部分を正規表現するため、card_data [0]に金額があり、card_data[2]にカードの名前があります。

今、私はそのカードをこのユーザーの持っているものに追加したいと思います。すでに存在する場合は、既存の金額に加算したいと思います。存在しない場合は作成して、指定した金額に設定したいと思います。どうすればいいのかよくわかりません。

ありがとう

4

2 に答える 2

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 に答える
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 に答える