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

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

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

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

Ruby on Rails

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

データベース設計

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

関数

関数(ファンクション・メソッド・サブルーチンとも呼ばれる)は、はプログラムのコードの一部であり、ある特定のタスクを処理するように設計されたものです。

コードレビュー

コードレビューは、ソフトウェア開発の一工程で、 ソースコードの検査を行い、開発工程で見過ごされた誤りを検出する事で、 ソフトウェア品質を高めるためのものです。

解決済

Rails 1対多関係にあるテーブルカラムの値を取り出し、合算したものをViewで表示させたい

ikutyan46
ikutyan46

総合スコア0

Ruby

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

Ruby on Rails

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

データベース設計

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

関数

関数(ファンクション・メソッド・サブルーチンとも呼ばれる)は、はプログラムのコードの一部であり、ある特定のタスクを処理するように設計されたものです。

コードレビュー

コードレビューは、ソフトウェア開発の一工程で、 ソースコードの検査を行い、開発工程で見過ごされた誤りを検出する事で、 ソフトウェア品質を高めるためのものです。

1回答

0評価

0クリップ

977閲覧

投稿2020/06/16 12:33

編集2022/01/12 10:58

##【実現したい事】
①1対多の関係にあるテーブルがあり、子関係にあるテーブルのカラムの値を取り出したい
②取り出したものをsum関数などで計算し、合算した値を、View上で表示させたい(=赤枠部分の合計練習時間を表示させたい)

イメージ説明

##【環境】
※未経験からエンジニア転職を目指してオリジナルアプリを開発中の者です(学習期間約2ヶ月程度)。
・Ruby:2.6.5
・Rails:5.2.4.3
・DB設計 ※詳細は下記コード
親:Recordテーブル
子:Practiceテーブル

##【試した事】
①Controllerのindexアクションに、total_practice_timeという新しい変数を宣言し、子レコード(Practiceテーブル)モデルの配列「:practices」を代入させる

②次の処理で、ブロック引数|total|を定めて、格納されているpractice_timeの値を全て足し算したものを結果として取り出す処理をする

しかし、「Syntax error」と出ており、何をどう直すべきか分からないため、ご意見・アドバイスを頂戴できますと幸いです。

RecordsController

def index @records = current_user.records.includes(:practices).page(params[:page]).per(8) total_practice_time = Record.includes(:practices) total_practice_time.each do |total| total.sum(:practice_time) end end

slim

h1 練習記録一覧 .container .row .col-sm-6 .form-group = form_with model: @record do |f| = f.date_field :training_date table.table-hover.table-respnsive thead tr th 練習日 th 登録日時 th 総練習時間 th th tbody - @records.each do |record| - record.practices.each do |practice| tr td= link_to record.training_date, record_path(record) td= record.created_at td= total / td= practice.practice_time td = link_to '編集する', edit_record_path(record), class: 'btn btn-primary mr-3' = link_to '削除する', record_path(record), method: :delete, data: { confirm: "練習記録を削除します。よろしいですか?" }, class: 'btn btn-danger'

##【コード】

recordmodel

class Record < ApplicationRecord validates :learning_point, presence: true validates :training_date, presence: true belongs_to :user has_many :practices, dependent: :destroy accepts_nested_attributes_for :practices end Practiceモデル class Practice < ApplicationRecord validates :practice_item, presence: true validates :practice_time, presence: true belongs_to :record end

shema

ActiveRecord::Schema.define(version: 2020_05_25_064157) do create_table "records", force: :cascade do |t| t.string "user_id" t.text "learning_point" t.date "training_date" t.datetime "created_at", null: false t.datetime "updated_at", null: false end create_table "practices", force: :cascade do |t| t.string "practice_item" t.integer "practice_time" t.bigint "record_id" t.datetime "created_at", null: false t.datetime "updated_at", null: false t.index ["record_id"], name: "index_practices_on_record_id" end

#エラーメッセージと画像
再開したところ、Syntaxerrorでした。

log

Started GET "/" for ::1 at 2020-06-16 21:56:55 +0900 SyntaxError - syntax error, unexpected end, expecting end-of-input: app/controllers/records_controller.rb:80:in `' Started POST "/__better_errors/cbfc53cbe6b50718/variables" for ::1 at 2020-06-16 21:56:56 +0900 Started GET "/" for ::1 at 2020-06-16 21:56:57 +0900 SyntaxError - syntax error, unexpected end, expecting end-of-input: app/controllers/records_controller.rb:80:in `' Started POST "/__better_errors/66effe8f5f8cef8c/variables" for ::1 at 2020-06-16 21:56:57 +0900

イメージ説明

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

winterboum
winterboum

2020/06/16 12:45

そのエラーメッセージをを載せてください。 回答に重要な情報が詰まってますので
ikutyan46
ikutyan46

2020/06/16 13:05

早速ありがとうございます!!先ほどエラーメッセージと画像添付しました。念のためご確認頂ければ幸いです。
winterboum
winterboum

2020/06/16 13:08

そのエラーは endのとじ方がおかしい、というものですので、controller全体がないとわからないですね
ikutyan46
ikutyan46

2020/06/16 13:28

ご丁寧にありがとうございます。Syntax errorは、indexアクションの「end」を1つ多くつけていたために発生していたことを確認しました。 それを消して新しいエラー(No method)が発生しましたので、Controllerも全部載せて変更しました。恐れ入りますが、今一度ご確認頂ければ幸甚です。
winterboum
winterboum

2020/06/16 14:26

そこで、回答の所に進みます

まだ回答がついていません

会員登録して回答してみよう

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

ただいまの回答率
87.20%

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

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

質問する

関連した質問

同じタグがついた質問を見る

Ruby

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

Ruby on Rails

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

データベース設計

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

関数

関数(ファンクション・メソッド・サブルーチンとも呼ばれる)は、はプログラムのコードの一部であり、ある特定のタスクを処理するように設計されたものです。

コードレビュー

コードレビューは、ソフトウェア開発の一工程で、 ソースコードの検査を行い、開発工程で見過ごされた誤りを検出する事で、 ソフトウェア品質を高めるためのものです。