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

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

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

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

PostgreSQL

PostgreSQLはオープンソースのオブジェクトリレーショナルデータベース管理システムです。 Oracle Databaseで使われるPL/SQLを参考に実装されたビルトイン言語で、Windows、 Mac、Linux、UNIX、MSなどいくつものプラットフォームに対応しています。

Ruby on Rails

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

データベース設計

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

Q&A

解決済

1回答

840閲覧

Rails/postgreSQL テーブルをまたいだデータの計算

shayashi683

総合スコア2

Ruby on Rails 5

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

PostgreSQL

PostgreSQLはオープンソースのオブジェクトリレーショナルデータベース管理システムです。 Oracle Databaseで使われるPL/SQLを参考に実装されたビルトイン言語で、Windows、 Mac、Linux、UNIX、MSなどいくつものプラットフォームに対応しています。

Ruby on Rails

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

データベース設計

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

0グッド

0クリップ

投稿2020/07/01 06:25

前提・実現したいこと

ここに質問の内容を詳しく書いてください。
Ruby on Rails (version 5.2.4.2)で評価システムを作っています。
PostgreSQLでデータベースを作っているのですが、テーブル間の計算機能を実装中に以下の計算が実行されないエラーが発生しました。

実行したい計算は、Elements_edu テーブルにある "faculty_student_n"と "faculty_teacher_n"を以下のように計算し、Evaluate_edu テーブルのraitio_stとしてデータベースに保存することです。なお、db/seeds.rbにてfaculty_student_nとfaculty_teacher_nはすでにデータベースに保存されており、raitio_stはカラムが空の状態です。
(計算式:raitio_st=ElementsEdu.faculty_student_n/ElementsEdu.faculty_teacher_n)

発生している問題・エラーメッセージ

エラーメッセージ:なし

該当のソースコード

class EvaluateEdu < ApplicationRecord belongs_to :assessment, optional: true has_one :elements_edu def raitio_st @evaluate_edus = EvaluateEdu.all @evaluate_edus.each do |ratio_st| ratio_st = ElementsEdu.faculty_student_n/ElementsEdu.faculty_teacher_n EvaluateEdu.raitio_st.update() end end end
class ElementsEdu < ApplicationRecord belongs_to :evaluate_edu, optional: true end

試したこと

・def ... end 文の追加
・pメソッドを使ってどのように値が表示されるかの確認。
・テーブルの初期化

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

使用PC: Macbook Pro
環境: Visual Studio Code, Ruby on Rails 5, PostgreSQL

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

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

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

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

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

guest

回答1

0

ベストアンサー

EvaluateEduモデルで一括で各レコードのratio_stをupdateしたいということだと思いますので、、、

EvaluateEduモデル

Ruby

1def self.update_all_ratio_st 2 all.each do |evaluate_edu| 3 evaluate_edu.update(ratio_st: evaluate_edu.calc_ratio_st) 4 end 5end 6 7def calc_ratio_st 8 elements_edu.faculty_student_n / elements_edu.faculty_teacher_n 9end

実行は、EvaluateEdu.update_all_raitio_st です。

でどうでしょうか。

投稿2020/07/01 09:02

Cojiro

総合スコア539

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

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

shayashi683

2020/07/06 10:16

ご回答ありがとうございます!そして、返信が遅くなり申し訳ありません。 EvaluateEduモデルにいただいたコードを入れたのですが、「実行」というのはterminalに'EvaluateEdu.update_all_raitio_s'を入れるということでしょうか?今のところ、rails db:migrateを実行してもevaluate_eduテーブルのratio_stには計算結果は表示されておりません。 ここの計算で開発がずっととまっておりますので、ご回答していただき大変助かっております。ありがとうございます。
Cojiro

2020/07/06 10:53

rails db:migrate を実行しても反映はされないでしょう。 > faculty_student_nとfaculty_teacher_nはすでにデータベースに保存されており という前提です。 ターミナルでもいいですし、ソースに書いてもいいです。
shayashi683

2020/07/06 12:34 編集

faculty_student_nとfaculty_teacher_nはすでにデータベース(elements_edu テーブル)に保存されております。 理解が悪くてすいません。ソースに書くというのは、EvaluateEduモデルに書くということでしょうか?このように書いてみたのですが、 ``` def self.update_all_ratio_st all.each do |evaluate_edu| evaluate_edu.update(ratio_st: evaluate_edu.calc_ratio_st) end end def calc_ratio_st self.faculty_student_n / self.faculty_teacher_n end EvaluateEdu.update_all_ratio_st ```
Cojiro

2020/07/06 12:22

こちらはメソッドを提案しているので、 モデルでもコントローラーでもターミナルでも好きなところでそのメソッドを利用してください。 何がしたいかが明確に記載されていないので、 回答の冒頭で > EvaluateEduモデルで一括で各レコードのratio_stをupdateしたいということだと思いますので、、、 とさせていただいておりましたが、この部分が違うということですか? 違うのであれば、何がしたいかを今一度提示していただけますか?
shayashi683

2020/07/06 12:44

現在、私が困っているところは以下の2つのテーブルに関するものです。 テーブル: evaluate_edu, カラム: ratio_st(現在null) テーブル: elements_edu, カラム: faculty_student_n, faculty_teacher_n (seedsファイルでデータは入っている) このelements_eduテーブルの値を計算、 evaluate_edu.ratio_st=elements_edu.faculty_student_n/faculty_student_n.faculty_teacher_n そして、evaluate_eduテーブルに保存させたいです。
Cojiro

2020/07/06 12:50

それは質問に書いてることですよね? それを下記のように解釈したのですが、違いますか? > EvaluateEduモデルで一括で各レコードのratio_stをupdateしたいということだと思いますので、、、
shayashi683

2020/07/06 12:57

その通りです。 となりますと、やはりいただいたコードでいいということでしょうか? コードにエラーは出ませんが、EvaluateEduテーブルに保存するための実行方法が分からないです。
Cojiro

2020/07/07 06:52

使う方法は先述の通りです。 Rails consoleでもコントローラーでも、他モデルでもという感じです。 これ以上に説明のしようがありません。。。 ※ あなたの環境を持っているわけではなく、動作確認はしてないので、エラーが出るものに関しては申し訳ないです。 もしかしたらクラスメソッドが初めてでイメージつかないのかもしれないですね。 インスタンスメソッドとクラスメソッドの違いは下記などを読んでください。(ぐぐるといっぱい出てきます。) https://qiita.com/right1121/items/c74d350bab32113d4f3d
shayashi683

2020/07/07 08:03

seedファイルにEvaluateEdu.update_all_raitio_st を記載して実行することができました。 本当にありがとうございます!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問