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

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

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

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Ruby on Rails

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

Q&A

解決済

1回答

1821閲覧

railsで作るタスク管理アプリにて

Kit5041

総合スコア20

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Ruby on Rails

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

0グッド

0クリップ

投稿2018/09/28 10:55

railsでタスク管理のTodoリストみたいなものを作ってます。

タスク完了群と未完了群を表示したいときに、dbは2つ作った方が良いのでしょうか?
それとも他にやり方があるのでしょうか?

どうかご回答よろしくお願いします。

試したこと

一通り検索してみたのですが、よくわからず、この場所と諸先輩方を頼ることにしました。

補足情報(FW/ツールのバージョンなど)

dbは、mysqlです。

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

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

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

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

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

guest

回答1

0

ベストアンサー

DBは一つで、中のテーブルを二つ作ればいいのではないでしょうか?
一つでも下記で作れます

Tasklistモデル
has_many :memos
has_many :users ,through: :memos

Userモデル
has_many :memos
has_many :tasklists ,through: :memos

Memoモデル
belongs_to :user
belongs_to :tasklist

tasklistsテーブル
type:integer
content:string

memosテーブル
user_id:integer
tasklist_id:integer

実用
@tasklistのtypeの値で完了か未完了か判断。
0:完了
1:未完了

完了したタスク一覧の取得
def finishedtask
@tasks = Task.where(type: 0)
end

適当なひとつの@taskにアサインしたuserは、memoを介してtaskと結びつく。@taskにアサインされたuserの一覧は、
def getusers
@users = @task.users
end
で取得できる

投稿2018/09/28 12:09

sansansandodo

総合スコア248

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

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

Kit5041

2018/09/29 11:57

回答頂きありがとうございます。 恥を承知でお聞きするのですが、dbは一つで、その中にテーブルを2つ作り、データを行き来させるというイメージであってますでしょうか?
sansansandodo

2018/09/29 13:17

行き来というのは違いますね。 DBっていうのは、でっかい箱です。 そのなかは、仕切りで区切られていて、部屋みたいな感じです その部屋をいくつか作ります。これがテーブルです 各部屋にはデータを置いておけます。 データは、何のデータかわかるように、識別できるようにアルバムに閉じておきます これがカラムです。実際のデータは、箱>部屋>アルバム、つまりDBの中のテーブルの中のカラムに入れておきます データはSQL文によって操作できます。 ただし、「移動させる」ことはできません できることは、作成、削除、編集、参照です。 行き来はしないわけです。 DBとは別に、アプリケーションがあります。railsで書いてるコントローラとかです。 アプリケーションからDBに対して、作成、削除、編集、参照を行えます このときの参照して変数に格納するまでを「データを取得する」とか言ったりしてます 取得したデータは、アプリケーション側で好きに操作できますが、どれだけ改変してもDBにあるもとのデータは変更されません。 DBのデータを変更したければ、「編集」しなければならないのです。 railsではモデル名.update()で行います。 今回やっているのは、この部屋同士の関連付けです。 適当なECサイトを想定して、ユーザーを管理する部屋、商品を管理する部屋、出品企業を管理する部屋があるとします。 このとき、ユーザーは商品を買いますが、企業を買ったりはしませんよね?? ユーザーと商品は関係しますが、ユーザーと出品企業は関係しないということです。 この関連付けを、明示的に記述しているのが本回答で行っていたことです。 太郎君がりんご1つを買ったとします。 太郎君の購入履歴を呼び出すとき、関連付けをしていなかったら、「まず全商品データをとってきて」「太郎君のユーザデータをとってきて」「全商品データから太郎君のユーザデータに一致する購買履歴を探す」みたいに書かなくちゃいけないです。 でも、関連付けることで、「太郎君に関係する商品データを取ってくる」でおしまいです。 なので関連付けたほうがお得です。 関連付けで参照関係を明示してあげることで、「データを取得」する際の参照命令が簡単になって楽!
Kit5041

2018/09/30 08:15

非常に丁寧な回答ありがとうございます! とても分かりやすく勉強になります! こんなに親切にご回答頂き大変申し訳ないのですが、、、 今回、私が実装したい機能は、ユーザーとの関連付けは無く、タスク群単体を表示し、そのタスク群が未完了・完了で分けて表示できるというものです。 この場合は、テーブルを複数作成するのではなく、データ自体に未完了か完了かという、カラムを付けて条件分岐で表示するデータを分けるという方法でよろしいのでしょうか? 私の質問の書き方が悪く、共通認識が取れないまま進めてしまい申し訳ございません。 何卒よろしくお願い致します。
sansansandodo

2018/09/30 08:48 編集

自分しか使わない想定なんですね! なら判別用のカラムだけ用意してあげれば大丈夫ですよ! kit5041さんのご認識の通りです! 本回答だと、type:integerがそれを判定してます。 今は完了未完了しか判断しないとのことなので、bool型(true か false)でも大丈夫です。 後々進捗率を表示することを考えるなら0〜100を入れれるintegerがいいです。100なら完了、それ以外は未完了、値をそのまま進捗率に。みたいな感じで使います。
Kit5041

2018/09/30 09:15

お早いご回答ありがとうございます。 そうなんです! ひとまずは、そのレベルから作ってみようと思いまして! 認識取りとのことありがとうございます。 ご意見参考に致します! ちなみになんですが、今回一つのidに、タイトル、内容、予定日、完了日、優先順位、未完了/完了をカラムとして付与させたいと思っているのですが、予定日・完了日のカラム名を「scheduleddate」「finisheddate」等にした時にエラーが出てしまうことがありました。 その際は、予定日・完了日ともに、データが無い状態でした。 その後、「scheduled」「completion」にカラム名を変えて、データがある状態にすると、エラー無く表示されました。 使用できないカラム名等があるのでしょうか? 調べて使用可能なカラム名まとめみたいなものからとってきたカラム名で、エラーが出たのでお聞きしたいです! それとも、単にデータが無いからエラー表示されたのでしょうか?
sansansandodo

2018/09/30 09:32

MYSQLの予約語は使えなかったかとおもいますが、その文字列は多分引っかからないでしょう。 データがないだけではエラーにならないと思います。どのタイミングでエラーが出たのかで話が変わるので推測になりますが、パッと思いつくのは下記です 1.migrationファイルでカラムにnilを禁止していた(null: false)のに、nilのままcreateしようとした 2.データのないカラムに対して、nilには使えないメソッドを使用した 状況を正確に把握できていないのでほぼ憶測(というか経験)で提示しています。正確に知りたければ、新たに質問し直すのがいいかと思いますよ。
Kit5041

2018/09/30 10:21

本来の回答に加え、お答え頂きありがとうございます! 総じて非常に勉強になりました! methodでエラーが出ていたかと思うので、またエラーが出た際には、正式に質問させて頂きます! また何かありましたらお世話になるかと思いますが、その際は何卒よろしくお願い致します。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問