質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Q&A

解決済

2回答

709閲覧

csvのレコードからDB一括更新する機能の実装方針を相談したい

k499778

総合スコア599

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

0グッド

0クリップ

投稿2021/09/30 10:58

編集2021/09/30 11:04

###やりたいこと
現在railsでwebアプリ開発をしております。

ある仕様があり、それをどのように実装していけばいいか設計を考えております。
自分でも考えがありますが、もっといいやり方はないかと思いアドバイスを求めております

###具体的に
一括更新の機能で、csvファイルの内容からDB更新をするというものです。

dbのhogeテーブルには 外部キー fuga_id_1 〜 fuga_id_5 fuga_value_1 〜 fuga_value_5 があり、今回それを更新します。 csvの1行に 主キーhoge_id,fuga_id,fuga_value,削除(○ or 空欄)のカラムがあります 登録、更新、削除ができます。 登録…登録していないfuga_idのとき 更新…すでに登録しているfuga_idのとき 削除…削除が○のとき

この時の実装方針を相談したいです。

1.削除が○の場合、対象のhoge_idを削除する 2.削除が○でなく、fuga_idがすでに登録されている場合、対象のhoso_idを更新する 3.削除が○でなく、fuga_idが登録されていない場合、対象のhoso_idを登録する

登録or更新に関しては、update_and_createでやっているのであまり意識しなくてよいです。

問題はその時のインデックスです。

1.更新の際にインデックスを取得して保持 (仮に2とし、それを保持する) 2.登録の際にインデックスが保持しているものと同じであれば+1する

###結論
このような流れで考えているのですが、
いかがでしょうか?もう少し良い方法などあればアドバイス頂ければと思います

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

自己解決

一旦自分の実装方針で動き的には問題なさそうなので、クローズさせていただきます

投稿2021/09/30 15:10

k499778

総合スコア599

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

インデックスってid のことですか?
idを指定してcreateするのは、DATABASE エンジンによってはできません。pgはだめです。mysqlはできましたが最新でもできるか、はわかりません。

あと、CSVのサイズによっては1件ずつの処理では遅くなります。
rails6ですとinsert_allというmethodができたので、それを使うとよいと思います。

投稿2021/09/30 13:53

winterboum

総合スコア23416

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

k499778

2021/09/30 13:55

ご返答ありがとうございます! ここで言っていたインデックスは fuga_id_N のNのことでした???? insert_allというメソッドがあるんですね!
winterboum

2021/09/30 14:03

なんかモデルの構成が違うような気がする。 もしかして 一つの hoge_id に対して fuga_id,fuga_value が最大5つあってそれを fuga_1,2,3,4,5にいれる。何番に入れてもよい ではない? だとすると、Hoge と Fugaのモデルを作って、1対多の関係にしたほうが色々やりやすいですよ。 別の質問でmaisumakunさんに回答もらってたのがありますが、それも1:多にすればわかりやすいのになる。
k499778

2021/09/30 15:10

>一つの hoge_id に対して fuga_id,fuga_value が最大5つあってそれを fuga_1,2,3,4,5にいれる。何番に入れてもよい だいたいその認識で合っていると思います! データ構造としては以下。 hogeテーブル、fugaテーブルが存在する hogeテーブルは、主キー(hoge_)id, 外部キー fuga_id_1~ 5, fuga_value_1 ~ 5 があります 1対多にすればわかりやすくなるんですね!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問