前提・実現したいこと
Ruby on Railsのform_forで数字を入力し複利積立の計算式を通して計算して、結果を表示したいと思い、modelにその数式を作り、viewで呼び起こそうとしたところ、演算子がundefined methodとなってしまいます。
そもそもこういう場合はmodelに数式を作っていいものなのでしょうか。
発生している問題・エラーメッセージ
undefined method `*' for nil:NilClass
該当のソースコード
modelのコードです↓
ruby
1class Compound < ApplicationRecord 2 validates :yield, numericality: true 3 validates :reserve, numericality: { only_integer: true } 4 validates :years, numericality: { only_integer: true } 5 6 def compound_interest 7 (reserve * 12) * (((( 1 + (yield / 100)) ** years) - 1) / (yield / 100)) 8 end 9end
new.html.erbというファイルのコードです。↓
ruby
1<div class="asset-management"> 2 <div class="asset-container"> 3 <%= form_for @compound do |f| %> 4 <div class="yeild"> 5 <p>年間利回り</p> 6 <%= f.number_field :yield, class: 'form-control' %>% 7 </div> 8 <div class="reserve"> 9 <p>毎月積立金額</p> 10 <%= f.number_field :reserve, class: 'form-control' %>円 11 </div> 12 <div class="years"> 13 <p>積立年数</p> 14 <%= f.number_field :years, class: 'form-control' %>年 15 </div> 16 <div class="calculate"> 17 <p><span><%= f.submit "計算する" %></span></p> 18 </div> 19 <% end %> 20 </div> 21</div>
create.html.erbというファイルのコードです。↓
ruby
1<div class="asset-management"> 2 <div class="asset-container"> 3 <p><%= @compound.compound_interest %>円</p> 4 </div> 5</div> 6
routes.rbのコードです。↓
ruby
1Rails.application.routes.draw do 2 post "compounds" => "compounds#create" 3 get "compounds" => "compounds#new" 4end
compounds_controller.rbというファイルのコードです。↓
ruby
1class CompoundsController < ApplicationController 2 def new 3 @compound = Compound.new 4 end 5 6 def create 7 @compound = Compound.new 8 end 9end
20200328114916_create_compounds.rbというファイルのコードです。↓
ruby
1class CreateCompounds < ActiveRecord::Migration[6.0] 2 def change 3 create_table :compounds do |t| 4 t.integer :yield 5 t.integer :reserve 6 t.integer :years 7 8 t.timestamps 9 end 10 end 11end
試したこと
controllerに数式を書いてみましたがダメでした。
あと、contorollerを↓のように書いたりもしましたがダメでした。
def create @compound = Compound.create( yield: params[:yield], reserve: params[:reserve], years: params[:years] ) end end
補足情報(FW/ツールのバージョンなど)
ruby 2.6.3
Rails 6.0.2.2