ある数値(ここでは測定値としています)、測定日、測定した時間帯の3つのデータを投稿画面から入力し保存するという、簡単な機能を実装していますが、createができず悩んでおります。
入力後、保存ボタンを押すと何かしらのエラーが出るわけでもなく、入力したデータがDBにも保存されず、何が原因かがわかりません。
以下、該当のソースになります。
measurements/new.html.erb
ruby
1 2<%= form_with model:@measurement, url: measurements_path, method: :post, local: true do |f| %> 3 <div class="form-input"> 4 <div class="input-measuremet-date"> 5 <p>日付</p> 6 <%= f.date_field :date %> 7 </div> 8 <div class="input-timezone"> 9 <p>時間帯</p> 10 <%= f.select :timezone, ['朝', '昼', '夜', 'その他'], {include_blank: '---'} %> 11 </div> 12 <div class="input-value"> 13 <p>測定値</p> 14 <%= f.text_field :value, id: "value"%>mg/dl 15 </div> 16 </div> 17 <%= f.submit '保存' , class: "measurement-btn" %> 18<% end %> 19
measurements/index.html.erb
ruby
1#省略 2 3<table class='measurement-lists'> 4 <thead> 5 <tr class="measurement-article"> 6 <th>日付</th> 7 <th>時間帯</th> 8 <th>測定値(mg/dl)</th> 9 </tr> 10 </thead> 11 <tbody> 12 <% @measurements.each do |measurement| %> 13 <tr class="measurement-contents"> 14 <td><%= measurement.date %></td> 15 <td><%= measurement.timezone %></td> 16 <td><%= measurement.value %></td> 17 </tr> 18 <% end %> 19 </tbody> 20</table> 21</div> 22 23
measurements_controller.rb
ruby
1 2class MeasurementsController < ApplicationController 3 4 def index 5 @measurements = Measurement.all.order("created_at DESC") 6 end 7 8 def new 9 @measurement = Measurement.new 10 end 11 12 def create 13 @measurement = Measurement.create(measurement_params) 14 if @measurement.save 15 redirect_to measurements_path #保存できたら一覧画面へ 16 else 17 render "new" #保存できなければ投稿画面のまま 18 end 19 end 20 21 22 23private 24 def measurement_params 25 params.require(:measurement).permit(:date, :timezone, :value).merge(user_id: current_user.id) 26 end 27end
measurement.rb
ruby
1class Measurement < ApplicationRecord 2 belongs_to :user 3 4 with_options presence: true do 5 validates :date 6 validates :timezone 7 end 8 9 validates :value, format: {with: /\A[0-9]{3}-[0-9]{4}\z/}, 10 numericality: { only_integer: true } 11 12end 13
デバックでmeasurement_params、@measurementの中身を確認すると、保存したいデータとuser_idはきちんと取れているようでした。
他に、コントローラーでMeasurement.create!と記述してみたところ "Validation failed: Value is invalid" というエラーが出るのでバリデーションエラーかと考えたのですが、調べても何が問題なのかがわかりませんでした。
どなたか、こちらの問題点をご教示のほどよろしくお願い致します。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/11/24 09:59