質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.31%
Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Q&A

解決済

2回答

249閲覧

f.inputで数値が送れない

NN77

総合スコア60

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

0グッド

0クリップ

投稿2024/05/13 11:37

編集2024/05/14 13:51

実現したいこと

railsのフォームで数値を格納したい

発生している問題・分からないこと

railsのActiveAdminで、サイトに掲載中の施設情報を編集できるようにしたいと考えています。
以下のようにviewにフォームを作成し、データ型がstringの施設名と電話番号は編集できたのですが、
データ型がintegerの駅徒歩分数のみがフォームに情報を入力し送信してもテキストデータで送られてしまっているようで、編集ができない状況です。

app/admin/nurseries.rb

ActiveAdmin.register Nursery do permit_params :no, :name, :tel, :walking_time filter :no filter :name form :partial => "form" # 一覧ページ index do selectable_column id_column column :no column :name column :walking_time actions end end

app/views/admin/nurseries.erb

<%= semantic_form_for [:admin, @nursery] do |f| %> <%= f.inputs do %> <%= f.input :name, label: "施設名" %> <%= f.input :tel, label: "電話番号" %> <%= f.input :walking_time, label: "駅徒歩分数" %> <% end %> <%= f.actions %> <% end %>

具体的な現象
・上記の結果作成されたActiveAdminの管理画面を開き、編集したいレコードのEditボタンを押す
・施設名、電話番号、徒歩分数を以下のように編集しUpdateボタンを押した結果、Updateボタンは押せ、施設名、電話番号は新しいデータに更新されたが、徒歩分数のみデータが更新されず古い情報のままになりました。
施設名:AA→BB
電話番号:00→11
徒歩分数:1→2

f.inputで数字を送る方法を調べても探し当てることができず、アドバイスいただけますと幸いです。

該当のソースコード

特になし

試したこと・調べたこと

  • teratailやGoogle等で検索した
  • ソースコードを自分なりに変更した
  • 知人に聞いた
  • その他
上記の詳細・結果

railsのフォームで数値を送る方法をいくつか検索しましたが、適切な記事が見当たりませんでした。
アドバイスいただき、以下記事が参考になりそうに思っていますが、walking_timeをformから受け取る際に数値化する書き方がわからずにおります。
https://qiita.com/tetsuyainfra/items/390652f179f329779f9d

補足

特になし

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ブラウザーからの情報は数値だろうと日時だろうとみな文字列で送られてきます。
それをmodelに取り込むときに「このcolumnは整数だから to_i」とかしています。
controllerの書き方が Rails が期待しているのと違っているのではないかな。
controllerのcodeを載せてください。
コメントに書くのではなく 質問を編集してそちらに。

投稿2024/05/13 13:48

winterboum

総合スコア23645

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

NN77

2024/05/14 05:23 編集

ありがとうございます。質問文にapp/admin/nurseries.rbを追加しました。 ご指摘いただき、以下Qiitaを参考にデータを数値化できそうだ、という点までは自分でたどり着けたのですが、具体的なコードの記載方法がわからずにおります。。 https://qiita.com/tetsuyainfra/items/390652f179f329779f9d
winterboum

2024/05/14 12:07

そかActiveAdminか見落としてました。 で、 編集できない と言うのは  こういう操作をした  こうなってほしい、こうなるはず と思ったが  こうなった というのを載せてください。 それと walking_time はinteger なんですね?
NN77

2024/05/14 13:53

ご返信ありがとうございます。 発生した現象について質問文に追記しました。 以下となります。 具体的な現象 ・上記の結果作成されたActiveAdminの管理画面を開き、編集したいレコードのEditボタンを押す ・施設名、電話番号、徒歩分数を以下のように編集しUpdateボタンを押した結果、Updateボタンは押せ、施設名、電話番号は新しいデータに更新されたが、徒歩分数のみデータが更新されず古い情報のままになりました。 施設名:AA→BB 電話番号:00→11 徒歩分数:1→2 >walking_time はinteger なんですね? はい、徒歩X分の表示用のため、timeではなくintegerです。
winterboum

2024/05/14 14:12

ふむ、面妖な。。。。 Updateボタンを押したときの Logをみたい
NN77

2024/05/15 06:38

おそらく以下がログになっていると思います。 "walking_time"=>"2"でUpdateはされているので、データ型が異なるためデータベース側ではじかれていると仮説立てています。 Started PATCH "/admin/nurseries/29313" for 106.72.185.64 at 2024-05-15 06:35:29 +0000 Cannot render console from 106.72.185.64! Allowed networks: 127.0.0.1, ::1, 127.0.0.0/127.255.255.255 Processing by Admin::NurseriesController#update as HTML Parameters: {"utf8"=>"✓", "authenticity_token"=>"0gpexFzE/tjD4WH46aAGXO1W0Evqg4yvPGpJECriMH0ag2xM99oKXsZrYb/yDHyTN1jM5lw673Eq2l+WxsAwQA==", "nursery"=>{"name"=>"BB", "tel"=>"11", "walking_time"=>"2"}, "commit"=>"Update Nursery", "id"=>"29313"} AdminUser Load (0.3ms) SELECT `admin_users`.* FROM `admin_users` WHERE `admin_users`.`id` = 1 ORDER BY `admin_users`.`id` ASC LIMIT 1 ↳ /usr/local/rvm/gems/ruby-2.7.8/gems/activerecord-5.2.8.1/lib/active_record/log_subscriber.rb:98 Nursery Load (0.3ms) SELECT `nurseries`.* FROM `nurseries` WHERE `nurseries`.`no` = 29313 LIMIT 1 ↳ /usr/local/rvm/gems/ruby-2.7.8/gems/activerecord-5.2.8.1/lib/active_record/log_subscriber.rb:98 (0.8ms) BEGIN ↳ /usr/local/rvm/gems/ruby-2.7.8/gems/activerecord-5.2.8.1/lib/active_record/log_subscriber.rb:98 Nursery Update (11.0ms) UPDATE `nurseries` SET `name` = 'BB', `tel` = '11', `walking_time` = 2, `updated_at` = '2024-05-15 06:35:29' WHERE `nurseries`.`no` = 29313 ↳ /usr/local/rvm/gems/ruby-2.7.8/gems/activerecord-5.2.8.1/lib/active_record/log_subscriber.rb:98 (10.0ms) COMMIT ↳ /usr/local/rvm/gems/ruby-2.7.8/gems/activerecord-5.2.8.1/lib/active_record/log_subscriber.rb:98 Redirected to https://11315ca35f9d4c8d9933b4f8bcd3d98a.vfs.cloud9.ap-southeast-1.amazonaws.com/admin/nurseries/29313 Completed 302 Found in 37ms (ActiveRecord: 22.4ms) Started GET "/admin/nurseries/29313" for 106.72.185.64 at 2024-05-15 06:35:29 +0000 Cannot render console from 106.72.185.64! Allowed networks: 127.0.0.1, ::1, 127.0.0.0/127.255.255.255 Processing by Admin::NurseriesController#show as HTML Parameters: {"id"=>"29313"} AdminUser Load (0.3ms) SELECT `admin_users`.* FROM `admin_users` WHERE `admin_users`.`id` = 1 ORDER BY `admin_users`.`id` ASC LIMIT 1 ↳ /usr/local/rvm/gems/ruby-2.7.8/gems/activerecord-5.2.8.1/lib/active_record/log_subscriber.rb:98 Nursery Load (0.3ms) SELECT `nurseries`.* FROM `nurseries` WHERE `nurseries`.`no` = 29313 LIMIT 1 ↳ /usr/local/rvm/gems/ruby-2.7.8/gems/activerecord-5.2.8.1/lib/active_record/log_subscriber.rb:98 Rendering /usr/local/rvm/gems/ruby-2.7.8/gems/activeadmin-2.9.0/app/views/active_admin/resource/show.html.arb LargeCategory Load (0.3ms) SELECT `large_categories`.* FROM `large_categories` WHERE `large_categories`.`no` = 1 LIMIT 1 ↳ /usr/local/rvm/gems/ruby-2.7.8/gems/activerecord-5.2.8.1/lib/active_record/log_subscriber.rb:98 MiddleCategory Load (0.2ms) SELECT `middle_categories`.* FROM `middle_categories` WHERE `middle_categories`.`no` = 2 LIMIT 1 ↳ /usr/local/rvm/gems/ruby-2.7.8/gems/activerecord-5.2.8.1/lib/active_record/log_subscriber.rb:98 SmallCategory Load (0.2ms) SELECT `small_categories`.* FROM `small_categories` WHERE `small_categories`.`no` = 5 LIMIT 1 ↳ /usr/local/rvm/gems/ruby-2.7.8/gems/activerecord-5.2.8.1/lib/active_record/log_subscriber.rb:98 Area Load (0.2ms) SELECT `areas`.* FROM `areas` WHERE `areas`.`no` = 1 LIMIT 1 ↳ /usr/local/rvm/gems/ruby-2.7.8/gems/activerecord-5.2.8.1/lib/active_record/log_subscriber.rb:98 Prefecture Load (0.2ms) SELECT `prefectures`.* FROM `prefectures` WHERE `prefectures`.`no` = 1 LIMIT 1 ↳ /usr/local/rvm/gems/ruby-2.7.8/gems/activerecord-5.2.8.1/lib/active_record/log_subscriber.rb:98 Zone Load (0.2ms) SELECT `zones`.* FROM `zones` WHERE `zones`.`no` = 3 LIMIT 1 ↳ /usr/local/rvm/gems/ruby-2.7.8/gems/activerecord-5.2.8.1/lib/active_record/log_subscriber.rb:98 City Load (0.2ms) SELECT `cities`.* FROM `cities` WHERE `cities`.`no` = 1 LIMIT 1 ↳ /usr/local/rvm/gems/ruby-2.7.8/gems/activerecord-5.2.8.1/lib/active_record/log_subscriber.rb:98 District Load (0.2ms) SELECT `districts`.* FROM `districts` WHERE `districts`.`no` = 1 LIMIT 1 ↳ /usr/local/rvm/gems/ruby-2.7.8/gems/activerecord-5.2.8.1/lib/active_record/log_subscriber.rb:98 Station Load (0.3ms) SELECT `stations`.* FROM `stations` WHERE `stations`.`no` = 7164 LIMIT 1 ↳ /usr/local/rvm/gems/ruby-2.7.8/gems/activerecord-5.2.8.1/lib/active_record/log_subscriber.rb:98 (0.2ms) SELECT COUNT(*) FROM `active_admin_comments` WHERE `active_admin_comments`.`resource_type` = 'Nursery' AND `active_admin_comments`.`resource_id` = 29313 AND `active_admin_comments`.`namespace` = 'admin' ↳ /usr/local/rvm/gems/ruby-2.7.8/gems/activerecord-5.2.8.1/lib/active_record/log_subscriber.rb:98 ActiveAdmin::Comment Exists (0.2ms) SELECT 1 AS one FROM `active_admin_comments` WHERE `active_admin_comments`.`resource_type` = 'Nursery' AND `active_admin_comments`.`resource_id` = 29313 AND `active_admin_comments`.`namespace` = 'admin' LIMIT 1 OFFSET 0 ↳ /usr/local/rvm/gems/ruby-2.7.8/gems/activerecord-5.2.8.1/lib/active_record/log_subscriber.rb:98 Rendered /usr/local/rvm/gems/ruby-2.7.8/gems/activeadmin-2.9.0/app/views/active_admin/resource/show.html.arb (128.0ms) Completed 200 OK in 133ms (Views: 127.7ms | ActiveRecord: 2.7ms) Started GET "/admin/nurseries/css/blockedPage.css" for 106.72.185.64 at 2024-05-15 06:35:30 +0000 Cannot render console from 106.72.185.64! Allowed networks: 127.0.0.1, ::1, 127.0.0.0/127.255.255.255 Processing by ApplicationController#render_404 as CSS Parameters: {"path"=>"admin/nurseries/css/blockedPage"} Completed 500 Internal Server Error in 2ms (ActiveRecord: 0.0ms) ActionView::MissingTemplate (Missing template errors/error_404 with {:locale=>[:en], :formats=>[:css], :variants=>[], :handlers=>[:raw, :erb, :html, :builder, :ruby, :coffee, :jbuilder, :arb, :jb]}. Searched in: * "/home/ec2-user/environment/hokatsu-ver3/app/views" * "/usr/local/rvm/gems/ruby-2.7.8/gems/activeadmin-2.9.0/app/views" * "/usr/local/rvm/gems/ruby-2.7.8/gems/devise-4.9.3/app/views" * "/usr/local/rvm/gems/ruby-2.7.8/gems/kaminari-core-1.2.2/app/views" ): app/controllers/application_controller.rb:27:in `render_404'
winterboum

2024/05/15 08:02

`walking_time` = 2, で update して commit されてますから updateも成功していると思われるのですが。。。 rails c にて Nursery.find_by(no: 29313) の結果 app/models/nursery.rb の内容 db/schema.rb の table "nurserries" のところ を見せてください。
guest

0

自己解決

winterbornさん、ご返答ありがとうございます。
時間の関係で一旦今回はwalking_timeは更新しない方針で実装を進めました。引き続き解明が必要なタイミングに改めて問題を絞り込んでご相談できればと思います。お力添え誠にありがとうございました。

投稿2024/05/17 12:34

NN77

総合スコア60

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.31%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問