Ruby on Rails で動的計算機能を実装したい。
現在Ruby on Railsで動的計算機能を実装して月間、毎日の支出を計算して表示する機能を実装しようとしています。
しかし実装ができません。
ローカル環境:docker/Ruby on Rails/GitHub
テーブル・modele:scoresテーブル/score.rb
月間、毎日の支出を計算➡️scoreとしています。
月間で機能を実装したらmonth~dayと併用しようと考えています。
viewはsores/new.html.erbです。
問題点がいくつかあります。
1:動的表示なのでJavaScriptでjsファイルを作成して動的に計算結果を表示する。
2:Rubyのインスタンスメソッドをmodeleにコーディングしてcontroller~view計算+結果を表示する
3:上記のどっちで実装するのが良いか判断できない。
問題点・1:動的表示なのでJavaScriptでjsファイルを作成して動的に計算結果を表示する。
js
1function ScoresInput () { 2 3 const MonthlyIncome = document.getElementById('monthly-income-score') 4 const Expense = document.getElementById('expense-score') 5 const ScoreMonth = document.getElementById('month-score') 6 7 Expense.addEventListener('keyup', function(){ 8 const MonthExpense = document.getElementById("expense-score").value; 9 const result = document.getElementById('month-score') 10 result = (`MonthlyIncome - MonthExpense`) 11 result.innerHTML = ScoreMonth 12 }) 13}; 14window.addEventListener('load', ScoresInput)
JavaScriptで実装する場合上記のコードで表示できないかトライ中です。
問題点・2:Rubyのインスタンスメソッドをmodeleにコーディングしてcontroller~view計算+結果を表示する
Ruby
1class ScoresController < ApplicationController 2 3 def index 4 end 5 6 def new 7 @score = Score.new 8 @month = @score.month_score(params[:user_id]) 9 score_month = x 10 monthly_income = y 11 expense = z 12 end
model
Ruby
1class Score < ApplicationRecord 2 3 with_options presence: true do 4 validates :score_month 5 validates :score_day 6 validates :score_year 7 validates :monthly_income 8 validates :pay 9 validates :pay_all 10 validates :expense 11 end 12 13 def month_score(add) 14 15 def initialize(score_month, monthly_income, expense) 16 @score_month = x 17 @monthly_income = y 18 @expense = z 19 end 20 21 def add 22 @add = self.puts "#{@monthly_income - @expense = @score_month}" 23 end 24 end 25 26 month_score = Score.new(score_month, monthly_income, expense) 27 month_score.add 28 29 belongs_to :user 30end
sores/new.html.erb
html
1<% if @month.length > 0 do %> 2 <% @month do %> 3 <div class="score-input"> 4 <p class='score_month_title'>月間の計算をしよう!</p> 5 <div class="weight-bold-text-question-text"> 6 <span>月収<br>(¥0〜9,999,999)</span> 7 <a class="question" href="#">?</a> 8 </div> 9 <div class="score_month_content"> 10 <div class="monthly_income_text"> 11 <span>月収</span> 12 <span class="indispensable">必須</span> 13 <span class="score-yen">¥</span> 14 <%= f.text_field :monthly_income, class:"score_monthly_income_input", id:"monthly-income-score", placeholder:"例)300" %> 15 </div> 16 </div> 17 <div class="score_month_content"> 18 <div class='score_month_expense_text'> 19 <span>出費</span> 20 <span class="indispensable">必須</span> 21 <span class="score-yen">¥</span> 22 <%= f.text_field :expense, class:"score_month_expense_input", id:"expense-score", placeholder:"例)300" %> 23 </div> 24 </div> 25 <div class="score_month_content"> 26 <div class='score_month_text'> 27 <span>月間の出費</span> 28 <span class="indispensable">必須</span> 29 <span class="score-yen">¥</span> 30 <%= f.text_field :score_month, class:"score_month_input", id:"month-score", placeholder:"例)300" %> 31 </div> 32 </div> 33 </div> 34 <% end %>
###問題点3:上記のどっちで実装するのが良いか判断できない。
独学でDocker環境を構築して現在開発していますが、本番環境になった場合を考えるとJavaScriptだけで機能を実装するかRUbyした方が効率的か判断ができていません。知識不足です。
エラーメッセージ
NameError in ScoresController#new undefined local variable or method `score_month' for #<Class:0x00007f44485dcf30> Extracted source (around line #26): 24 25 26 27 28 29 end month_score = Score.new(score_month, monthly_income, expense) month_score.add belongs_to :user Rails.root: /app Application Trace | Framework Trace | Full Trace app/models/score.rb:26:in `<class:Score>' app/models/score.rb:1:in `<main>' app/controllers/scores_controller.rb:7:in `new' Request Parameters: {"user_id"=>":user_id"} Toggle session dump Toggle env dump Response Headers: None
試したこと
格言語のリファレンスを参照、Qiita記事を読み漁りひたすら模写してみる。
家計簿アプリを例にコーディングするが思い通りの表示ができない。
補足情報
初めてteratailの投稿になります。
質問が下手と感じる方も多いと思いますが、問題点のどれか1つでも良いのでアンサーいただけると助かります。
現在プログラミングスクルールを卒業してポートフォリオ作成中です。
本番環境はスクールで習わなかった、Docker,AWS,CircleCi,ECS,EC2で考えています。
罵倒でも何でも受け付けます。
少しでも読んでいただいた、あなたの知識をお貸しください。
あなたの回答
tips
プレビュー