LoginSignup
0
0

More than 3 years have passed since last update.

Rails datetime_fieldでの取得で「有効な値を入力してください」とエラーが出た時の対処法

Posted at

エラー発生

Railsで投稿フォームを実装していた時にPCでは問題なく動作していたのですが、

なぜかスマホで使おうとするとエラーが出る部分があったので書いておきます。

new.html.erb
<%= form_for @ride, method: :post do |f| %>
    <h1>新しいライドを投稿しよう!</h1>
    <label>タイトル</label>
    <p><%= f.text_field :title %></p>
    <label>予定日</label>
    <br />
    <%= f.datetime_field :sch_datetime %><br />
    <br />
    <input class="btn btn-primary" type="submit" value="投稿">
  <% end %>

config/initializers/time_formats.rb
Time::DATE_FORMATS[:datetime] = '%Y年%m月%d日 %H時%M分'
config/locales/application.rb
class Application < Rails::Application
    config.load_defaults 5.2
    config.i18n.default_locale = :ja
    config.assets.paths << config.root.join("vendor/assets/javascripts")
    config.assets.paths << config.root.join("vendor/assets/stylesheets/")
    config.action_view.embed_authenticity_token_in_remote_forms = true
    config.time_zone = 'Tokyo'
end

最初に記述していたのはこんな感じでdatetime_fieldを使うことで日時をまとめて取得できるようにしていました。

この方法でPCでは全く問題なく動作しているのを確認していたのでこの状態でデプロイしたのですが、

ふとスマホで動作確認しようと思い触ってみると投稿しようとすると日時の部分で

「有効な値を入力してください」とエラーがでて投稿できませんでした。。。

原因はなんだろう?

と考えてみましたがPCで正常に動作しているのでコードのミスではないと推測しました。

スマホとPCで入力する時のフォームも変化しているのでdatetime_field自体に問題がありそうだな〜と

思ったのでdate_fieldとtime_fieldに分けて書いてみることにしました。

new.html.erb
<%= form_for @ride, method: :post do |f| %>
    <h1>新しいライドを投稿しよう!</h1>
    <label>タイトル</label>
    <p><%= f.text_field :title %></p>
    <label>予定日</label>
    <br />
    #ここから
    <%= f.date_field :sch_datetime %><br />
    <br />
    <%= f.time_field :sch_datetime %><br />
  #ここまで変更
    <br />
    <input class="btn btn-primary" type="submit" value="投稿">
  <% end %>

この状態で動作確認してみると無事問題なく動作しました!

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0