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

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

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

CentOSは、主にRed Hat Enterprise Linux(RHEL)をベースにした、フリーのソフトウェアオペレーティングシステムです。

Ruby

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

MySQL

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

Ruby on Rails

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

Vagrant

Vagrantは、VirtualBox上の仮想マシンを コマンドラインから作成してくれるソフトウェアです。 ビルド環境など容易に構築が可能です。

Q&A

解決済

1回答

5664閲覧

テーブル間でのカラム値の代入方法について

koume

総合スコア458

CentOS

CentOSは、主にRed Hat Enterprise Linux(RHEL)をベースにした、フリーのソフトウェアオペレーティングシステムです。

Ruby

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

MySQL

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

Ruby on Rails

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

Vagrant

Vagrantは、VirtualBox上の仮想マシンを コマンドラインから作成してくれるソフトウェアです。 ビルド環境など容易に構築が可能です。

0グッド

0クリップ

投稿2017/07/24 11:38

Rails5.1.1でWebアプリケーション制作の勉強中です。おかげさまでデータベース(モデル)のところまで進むことができました。
現在、テーブルを9つ作りhas_many, has_one, belongs_to で関連付けしカラム値を変更したり代入したりしたいのですが
うまく考えがまとまらないのと、変数の利用の仕方がわからず悩んでおります。やりたいことは以下になります。

疑問1,
membersテーブルでnumber1カラム値とnumber2カラム値を足した値をscoreカラムに代入したい。

class Member < ActiveRecord: :Base member = Member.find(3) #レコードを取り出し変数(member)に代入する。 abc = member.number1 #取り出したレコードのnumber1の値を変数(abc)に代入する。 xyz = member.number2 #取り出したレコードのnumber2の値を変数(xyz)に代入する。 ghi = abc + xyz #代入した変数の値を加算して変数ghiに代入する。 member = Member.create(score: [ghi]) #scoreカラムに代入

・上記で使用する変数はローカル変数でよいのでしょうか?
・scoreカラムに代入する際、値を変数[ghi]で渡せる(代入できる)のでしょうか?

関連付けされたテーブル間でのカラム値の受け渡し方法について
・has_many, belongs_toで関連付けしたpointsテーブルのdata1カラムにmemberテーブルのscoreカラムの値を代入したい。

疑問2,
代入するのはmemberモデル内で行うのか?pointモデル内で行うのか?
このような場合に使うのはインスタンス変数なのかローカル変数どちらを使うのか?

#memberモデル class Member < ActiveRecord: :Base member = Member.find(3) #レコードを取り出し変数(member)に代入する。 a = member.score #取り出したレコードのscoreの値を変数(a)に代入する。 point = Point.create(data: [a]) #poitテーブルのdataカラムに代入

もしくは

#memberモデル class Member < ActiveRecord: :Base member = Member.find(3) #レコードを取り出し変数(member)に代入する。 @a = member.score #取り出したレコードのscoreの値を変数(a)に代入する。 #memberモデルで変数aにscoreカラムの値をaに代入しておいて #pointモデル class Point < ActiveRecord: :Base point = Point.create(data: [@a]) #poitテーブルのdataカラムに変数@aを代入 #memberモデルで作った変数aをpointモデルで使いdataカラムに代入する。

上記のように変数aを2つのテーブルで使用することが出来るのかわからずに困っております。
テーブル間をまたいだ変数の読み込みはローカル変数ではなくインスタンス変数なのかな?と思いましたがそれも違うような気がしてます。
テーブル間をまたいだデータ(変数)のやりとり方法が知りたいです。
もっといい方法があるのであれば教えていただけないでしょうか?
宜しくお願いします。

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

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

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

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

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

guest

回答1

0

ベストアンサー

全般にコードがおかしいのですが、投稿するときに書き換えた事による問題なのか、正しいコードの書き方を知らないせいなのかわかりません。一応想像で補完して回答書きましたが、これの意味がわからないようでしたら、ちょっと先に進みすぎているように思います。Rubyの入門書を読みつつ、Railsの入門書やRailsチュートリアルを一通りやってみて動きが理解できるようになることが必要です。

疑問1

このコードであれば、変数に保存する必要が無いです。

member = Member.find(3) member = Member.create(score: member.number1 + member.number2)

ところでこのコード、1行目のmemberと2行目のmemberは違うものになってしまっています。やりたいのは

member = Member.find(3) member.update(score: member.number1 + member.number2)

のような気がします。

そうであれば、scoreカラムはいらないのではと言う話になってきます。

class Member < ActiveRecord::base def score number1 + number2 end end m = Member.find(3) m.score #=> m.number1 + m.number2 の結果が帰ってくる

> 疑問2

これも変数使う必要が無いです。

member = Member.find(3) point = Point.create(data: member.score)

(が、Memberモデルの値をコピーして保存する、という操作自体が必要なのか疑問です。)

投稿2017/07/24 14:15

suzukis

総合スコア1449

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

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

koume

2017/07/24 23:19

いつも的確な回答ありがとうござます。入門書、Railsチュートリアルをもう一度じっくりやり直してみます。今後とも宜しくお願いします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問