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

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

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

Deviseとは、Ruby-on-Railsの認証機能を追加するプラグインです。

Webサイト

一つのドメイン上に存在するWebページの集合体をWebサイトと呼びます。

Ruby on Rails

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

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

データベース設計

データベース設計はデータベースの論理的や物理的な部分を特定する工程です。

Q&A

解決済

1回答

1219閲覧

deviseを用いてのユーザー登録で他のテーブルで纏められているものをどう扱うのか?

rurukasan0212

総合スコア5

Devise

Deviseとは、Ruby-on-Railsの認証機能を追加するプラグインです。

Webサイト

一つのドメイン上に存在するWebページの集合体をWebサイトと呼びます。

Ruby on Rails

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

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

データベース設計

データベース設計はデータベースの論理的や物理的な部分を特定する工程です。

0グッド

0クリップ

投稿2020/04/15 20:22

deviseを用いてのユーザー登録

Railsの勉強を3週間ほど経ち,現在始めてのアプリ開発をしている るるか というものです。
今回が初めての質問になります。

DBの設計に手間取っています。
deviseを導入し,ユーザー登録機能を実装しようと思っております。

疑問点

現在はTOPページを添付の写真の様に作っていこうと思っているのですが,その際に必要な情報を登録時に入力して貰いたくusersテーブルにカラムを追加していっているところです。
カラムに学校のクラスと通学スタイル(昼or夜)を追加しようと思ったのですが,正規化をしている最中にこの二つの項目が繰り返し出てくる事に気づき新たにclassテーブルとstyleテーブルを作り,アソシエーションでつなげるべきだと考えました。
その場合はusersテーブルのカラムにはclass_idとstyle_idを外部キーとして記述し,初期の登録画面でclassとstyleを記入せず,その後にclass,styleのそれぞれのコントローラーからのアクションで記入をさせる。という認識であっていますか?

usersカラムの中には他に下記の様なものを追加しました。

  • name
  • face_image
  • seat_number
  • twitter_id
・former_id
  • shout_message

Usersテーブルにこの様に大量にカラムを追加して良いのでしょうか?
簡単すぎてか,検索能力が未熟なのかは分かりませんが,なかなか望む様な情報が見つからず,ご質問させていただきました。

お優しい方,申し訳ありませんが,ご教授いただければ幸いです。

イメージ説明

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

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

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

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

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

guest

回答1

0

ベストアンサー

3週間で正規化ですか、只者ではないですね。

方向は合っていますが、Class という命名はいただけません。予約語とかぶるので予期せぬことが予期されます。

userにどんなcolumnを追加しても良いですが、そのデータを「ユーザ登録時」に行う場合には、Deviseに追加項目を知らせる必要があります。(検索してください)

ですので、その手順を踏めば
「初期の登録画面でclassとstyleを記入せず,その後に」でもその時に入力でもできます。
ただ
「class,styleのそれぞれのコントローラーからのアクション」ではなく、UserのUPDATEで行う方がよいかと。

投稿2020/04/16 02:18

winterboum

総合スコア23347

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

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

rurukasan0212

2020/04/16 03:25

ご回答本当にありがとうございます。 質問,回答を通して自分が分からない所はどこなのかを理解する事ができました。 Deviseに追加項目を知らせる事自体は実装済みなのですが,外部キーの取り扱いについて,モヤっとした疑問が自分にはある様です。 nameやface_image等のカラムをユーザー登録時に入力して貰う事に関しては過去に実装した事があるのでわかっています。 しかし,term(前記述class)やstyleカラムは外部キーであるので,直接クラス(3-4とか)を記入してしまうとエラーが出てしまうと予測されます。 「初期の登録画面でclassとstyleを記入せず,その後に」でもその時に入力でもできます。
 という部分に引っ掛かった為,ご返信させて頂きました。 私はユーザー登録時にクラスもスタイルも入力できる様に実装したいです。 お忙しいとは思いますが返答いただければ幸いです。
winterboum

2020/04/16 04:32

クラスのclassをClassにするのはやめた方がよいですよ。 クラスもスタイルもマスター的なDBが作られるのでしょうから、 select :style_id で実装したらどうでしょう
rurukasan0212

2020/05/04 00:34

回答ありがとうございます。ご返信遅くなり申し訳ありません。 今回の実装は,テーブルをuserテーブルとprofileテーブルに分けて,accepts_nested_attributes_forを使って同じ画面で入力できる様に実装しました。 また、クラス,スタイルはenumを使って実装しました。 予約語についても理解が深まりました(今回のは露骨すぎましたが笑)。 winterboumさんが初めての回答者様でよかったです!ありがとうございました!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問