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

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

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

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

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

CSS

CSSはXMLやHTMLで表現した色・レイアウト・フォントなどの要素を指示する仕様の1つです。

Q&A

解決済

1回答

1199閲覧

データベースにデータが保存できません。。。

kaerunrun

総合スコア6

Ruby on Rails

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

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

CSS

CSSはXMLやHTMLで表現した色・レイアウト・フォントなどの要素を指示する仕様の1つです。

0グッド

0クリップ

投稿2020/09/19 17:54

編集2020/09/19 17:55

前提・実現したいこと

プログラミングの勉強を始めて、3ヶ月くらいの初心者です。
初歩的な質問なのかもしれないですが、目をとしていただけると嬉しいです。

募集の項目を作って、creatアクションで保存し、トップページに表示したいのですが、データベースに保存されず、トップページにも行かず、newのページに戻ってしまいます。ターミナルを見ると、ROLLBACKと出ています。特にエラーなどは出ず、newのページから動かないような状態です。。。

該当のソースコード

[golves_controller.rb] lass GolvesController < ApplicationController before_action :find_golf_params, only: [:show, :edit, :update, :destroy] def index @golf = Golf.all .order("created_at DESC") end def new @golf = Golf.new end def create @golf = Golf.new(golf_params) binding.pry if @golf.save redirect_to root_path else render :new end end
[golf.rb] class Golf < ApplicationRecord extend ActiveHash::Associations::ActiveRecordExtensions belongs_to :users, optional: true belongs_to_active_hash :prefecture belongs_to_active_hash :drive belongs_to_active_hash :meeting_time has_one_attached :image # has_one :purchase, dependent: :destroy with_options presence: true do validates :image validates :title, length: { maximum: 40 } validates :introduction: { maximum: 1000 } validates :play_date validates :meeting_time_id validates :prefecture_id validates :course_name validates :drive_id validates :price, numericality: { only_integer: true, greater_than: 0, less_than: 100000 } validates :score end end
[マイグレーションファイル] class CreateGolves < ActiveRecord::Migration[6.0] def change create_table :golves do |t| t.string :title, null: false t.text :introduction, null: false t.date :play_date, null: false t.integer :meeting_time_id, null: false t.integer :prefecture_id, null: false t.string :course_name t.integer :drive_id, null: false t.integer :price, null: false t.references :user, foreign_key: true t.timestamps end end end
[new.html.erb] <div class="items-sell-main"> <h2 class="items-sell-title">募集の詳細を入力</h2> <%= form_with model: @golf, url: golves_path, method: :post, local: true do |f| %> 〜中略〜 <div class="sell-btn-contents"> <%= f.submit "募集する" ,class:"sell-btn" %> <%=link_to 'もどる', root_path, class:"back-btn" %> </div> <%# /下部ボタン %> </div> <% end %>

試したこと

controllerのcreateの下にbinding.pryをかけてparamsの中身を調べてみましたが、全て渡せているようです。
次に、newとsaveの間にbinding.pryを記述してみたら、

[1] pry(#<GolvesController>)> @golf => #<Golf:0x00007f9202ceabf8 id: nil, title: "あ", introduction: "ああ", play_date: nil, meeting_time_id: 4, prefecture_id: 4, course_name: "あああああ", drive_id: 1, price: 20000, user_id: 3, created_at: nil, updated_at: nil, score: 0>

このように、nillの箇所がありました。これが原因なのかとは思ったのですが、なぜnillになっているのか。。。

補足情報(FW/ツールのバージョンなど)

補足で、dateには

<%= f.date_select :play_date, {}, class:"select-box", id:"golf-date" %>

とdate_selectの記述を使っています。
ご回答いただけるとありがたいです。
よろしくお願い致します。

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

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

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

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

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

guest

回答1

0

ベストアンサー

Schemaを見ると t.date :play_date, null: false

play_datenil を禁止しているのに、

Pryの結果だと、

[1] pry(#<GolvesController>)> @golf => #<Golf:0x00007f9202ceabf8 id: nil, title: "あ", introduction: "ああ", play_date: nil, meeting_time_id: 4, prefecture_id: 4, course_name: "あああああ", drive_id: 1, price: 20000, user_id: 3, created_at: nil, updated_at: nil, score: 0>

play_date: nil なので、これが原因っぽいですね(他にも原因はあるかもしれないし、断定はできませんが)

こうなってしまっている原因はいろいろ考えられます

  • formでデータが入力されていない
  • formからデータが送信できていない
  • formからデータをうまく受け取れていない
  • formからデータは受け取れているが、Strong Parameterに設定されていないので変数に格納されていない

なのでまずは binding.prygolf_params の中身を見てみて、
それでもなかったら Strong Parameter に設定できているか確認してみて、
それでもなかったら Strong Parameterに渡す params の中身を見てみて、
それでもなかったら Chrome Developper tools > Network でPOSTで何を送ってるか見てみて
...

という感じで一つ一つ見てみるのが良いかと思います????

投稿2020/09/19 21:15

s4na_penguin

総合スコア176

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

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

kaerunrun

2020/09/23 05:45

丁寧にありががとうございました! バリテーション を改善して解決しました! ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問