前提・実現したいこと
railsで簡易アプリを作成しているのですが、
フォームのデータがDBに保存されません(nilが返ります)。調べても解決しないのでアドバイスを頂けると助かります。
おそらくストロングパラメーターが悪さをしていると思うのですが、、、
seedではデータが挿入できます。
よろしくお願いいたします。
発生している問題・エラーメッセージ
/controller.rb
#エラー文
param is missing or the value is empty: weight
該当のソースコード
#routes
Rails.application.routes.draw do
root 'homes#index'
resources :weights, only: [:index, :create, :show, :new]
end
#controller.rb
class WeightsController < ApplicationController
def index
end
def new
@weight = Weight.new(weight_params)
@weight.save
end
def create
if weight = Weight.new(weight_params)
binding.pry
redirect_to weight_path(weight)
else
render :new
end
end
def show
@weight = Weight.find(params[:id])
end
private
def weight_params
params.require(:weight).permit(:age, :weight, :height)
end
end
#new.html.erb
<%= @weight.errors %>
<%= form_for(@weight) do |f| %> <p>年齢</p> <%= f.text_field :age %> <p>身長</p> <%= f.text_field :height %> <p>体重</p> <%= f.text_field :weight %> <br> <%= f.submit "BMIを計算する" %> <% end %>
#モデル
class Weight < ApplicationRecord
#身長と体重にバリーデーションを加える
with_options presence: true do
validates :age
validates :height
validates :weight
end
end
ソースコード
試したこと
ここに問題に対して試したことを記載してください。
#pry-rails
1] pry(#<WeightsController>)> params
=> <ActionController::Parameters {"utf8"=>"✓", "authenticity_token"=>"jrII+JBgIA+aGF3vuGiuHBBoR6sDmaXVyWFpXetG7DCZ5uuHHEd8oBfww6pBQhiTwuNllgmD9xAqyJwFBIzrYQ==", "weight"=><ActionController::Parameters {"age"=>"33", "height"=>"342", "weight"=>"324"} permitted: false>, "commit"=>"BMIを計算する", "controller"=>"weights", "action"=>"create"} permitted: false>
[2] pry(#<WeightsController>)> weight
=> #<Weight:0x00007fbe6f9613d0 id: nil, age: 33, weight: 324, height: 342, created_at: nil, updated_at: nil>
[3] pry(#<WeightsController>)> weight.save
(0.3ms) begin transaction
↳ (pry):3
Weight Create (2.4ms) INSERT INTO "weights" ("age", "weight", "height", "created_at", "updated_at") VALUES (?, ?, ?, ?, ?) [["age", 33], ["weight", 324], ["height", 342], ["created_at", "2020-11-25 09:03:31.813197"], ["updated_at", "2020-11-25 09:03:31.813197"]]
↳ (pry):3
(1.7ms) commit transaction
↳ (pry):3
=> true
#rails c
[1] pry(main)> a = Weight.find(11)
Weight Load (1.7ms) SELECT "weights".* FROM "weights" WHERE "weights"."id" = ? LIMIT ? [["id", 11], ["LIMIT", 1]]
=> #<Weight:0x00007fafc9469990
id: 11,
age: nil,
weight: nil,
height: nil,
created_at: Wed, 25 Nov 2020 07:27:46 UTC +00:00,
updated_at: Wed, 25 Nov 2020 07:27:46 UTC +00:00>
[2] pry(main)> a.age
=> nil
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
rails 5.2.4
ruby 2.5.7