実現したいこと
- Ruby on rails7において、save_timeというカラムに文字列を保存したい。
前提
Ruby on rails7で健康観察アプリを作成しています。
save_timeというカラム以外には値が保存されるのですが、save_timeだけにはnilが保存されます。
エラーメッセージなどは特に出ないです。
下記に示すコードにおいて23行目が該当コードです。
該当のソースコード
controller.rb
1class HealthsController < ApplicationController 2 before_action :set_q 3 def top 4 end 5 6 def index 7 @health=Health.all 8 @results=@q.result 9 end 10 11 def show 12 @health=Health.all 13 @results=@q.result 14 end 15 16 def new 17 @health=Health.new 18 @date=Date.today 19 end 20 21 def create 22 health=Health.new(health_params) 23 health.save! 24 redirect_to(healths_url, notice: "送信を完了しました。") 25 end 26 27 def search 28 @results=@q.result 29 end 30 31 private 32 33 def health_params 34 params.require(:health).permit(:year, :school_class, :class_number, :name, :commute, :temperature, :etc) 35 end 36 37 def set_q 38 @q=Health.ransack(params[:q]) 39 end 40end 41
Ruby
1<h1>健康観察アプリ</h1> 2<% require "date" %> 3<%= link_to "ホーム画面に戻る", "/healths" %>|<%= link_to "全体検索を行う", "/healths/show" %>|<%= link_to "個別検索を行う", "/healths/index"%> 4<% # コントローラーで生成されたインスタンスメソッド@healthにデータを付与 %> 5<%= form_with(model: @health, local: true) do |form| %> 6 <table> 7 <tr> 8 <td>学年(選択必須)</td><td><%= form.select :year, [["1年","1年"], ["2年","2年"], ["3年","3年"]],{include_blank: '選択してください'} %></td> 9 </tr> 10 <tr> 11 <td>組(選択必須)</td><td><%= form.select :school_class, [["A組","A組"], ["B組","B組"], ["C組","C組"],["D組","D組"], ["E組","E組"], ["F組","F組"],["G組","G組"], ["H組","H組"], ["I組","I組"]],{include_blank: '選択してください'} %></td> 12 </tr> 13 <tr> 14 <td>出席番号(選択必須)</td><td><%= form.select :class_number, [["1番",1], ["2番",2], ["3番",3],["4番",4], ["5番",5], ["6番",6],["7番",7], ["8番",8], ["9番",9],["10番",10], 15 ["11番",11], ["12番",12], ["13番",13],["14番",14], ["15番",15], ["16番",16],["17番",17], ["18番",18], ["19番",19],["20番",20], 16 ["21番",21], ["22番",22], ["23番",23],["24番",24], ["25番",25], ["26番",26],["27番",27], ["28番",28], ["29番",29],["30番",30], 17 ["31番",31], ["32番",32], ["33番",33],["34番",34], ["35番",35], ["36番",36],["37番",37], ["38番",38], ["39番",39],["40番",40],],{include_blank: '選択してください'} %></td> 18 </tr> 19 <tr> 20 <td>氏名(入力必須)</td><td><%= form.text_field :name, {include_blank: '入力して下さい'} %></td></td> 21 </tr> 22 <tr> 23 <td><% form.text_area :save_time,value: @date.strftime("%Y-%m-%d") %></td> 24 <tr> 25 </table> 26 <hr> 27 <%= form.radio_button :commute, "登校" %><%= form.label :commute, "登校", value: "登校"%> 28 <%= form.radio_button :commute, "遅刻" %><%= form.label :commute, "遅刻", value: "遅刻"%> 29 <%= form.radio_button :commute, "欠席" %><%= form.label :commute, "欠席", value: "欠席"%> 30 <table> 31 <tr> 32 <% # 初期値は右寄せが必要 %> 33 <td>測定した体温</td><td><%= form.text_field :temperature, value: "度"%></td> 34 </tr> 35 <tr> 36 <td>その他</td><td><%= form.text_area :etc %></td> 37 </tr> 38 </table> 39 <%= form.submit %> 40<% end %>
試したこと
save_timeがnilになってしまう該当コード
<td><% form.text_area :save_time,value: @date.strftime("%Y-%m-%d") %></td> において、表示する必要がないので<%%>としていますが、<%= %>にするときちんとその日の日付がyyyy-mm-dd形式の文字列で表示されます。 しかし、文字列が初期値として入力されていることは確認できましたが、この文字列をsave_timeカラムに保存するとなるとnilになってしまいます。 save_timeのデータ型なども確認しましたが、string型になっています。 関係ないかもしれないですが、 config/application.rbにおいて config.time_zone="Tokyo" を追加、 config/initializers/配下に Time::DATE_FORMATS[:default]="%Y-%m-%d" と書いたファイルを作成しています。<追記>
コントローラーのコードを追加しました。
今回の質問に該当するアクションはnewアクションとcreateアクションで
newアクションはget, createアクションはpostをルーティングで指定しています。
回答1件
あなたの回答
tips
プレビュー