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

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

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

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Ruby on Rails

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

データベース

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

Q&A

1回答

5067閲覧

Rails 入力データが保存されない

makoto1026

総合スコア4

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Ruby on Rails

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

データベース

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

0グッド

0クリップ

投稿2020/03/19 06:46

解決したいこと

料理投稿アプリを作成しており、ancestryでカテゴリ機能を導入しましたが、投稿フォームで記事を投稿してもデータベースに投稿が保存されない不具合が起きています。(エラー文は出てきませんが、送信ボタンを押した後にROLLBACKが起きています)

例)親カテゴリ「食材」、子カテゴリ「肉」、孫カテゴリ「豚肉」のように登録しています。

コード

[posts_controller] def new @post = Post.new @category_parent_array = ["カテゴリ選択"] Category.where(ancestry: nil).each do |parent| @category_parent_array << parent.name end end ~省略~ private def post_params params.require(:post).permit(:title, :body, :image, :material, :category_id).merge(user_id: current_user.id) end
[post.rb] belongs_to :user, foreign_key: 'user_id' has_many :likes has_many :liked_users, through: :likes, source: :user belongs_to :category validates :title, :body, :material, :category_id, presence: :true
[new.html.haml] .post-wrapper__groups--text 投稿フォーム = form_for @post do |f| =f.text_field :title, class: "post-wrapper__groups--title", placeholder: " タイトルを入力してください(10文字以内)" =f.text_area :material, class: "post-wrapper__groups--materials", placeholder: " 材料を入力してください" =f.text_area :body, class: "post-wrapper__groups--recipe", placeholder: " レシピを入力してください" = f.submit '送信', class: 'post-wrapper__groups--submit' = f.label :image, class: "post-wrapper__groups--inputImage" do = icon('fas', 'camera-retro') = f.file_field :image, class: "post_img" .listing-form-box .listing-product-detail__category %span.listing-default--require .listing-select-wrapper .listing-select-wrapper__box = f.select :category_id, @category_parent_array, {}, {class: 'listing-select-wrapper__box--select', id: 'parent_category'} %p カテゴリ選択 ※必須
[binding.pryした際のパラメーター] => <ActionController::Parameters {"utf8"=>"✓", "authenticity_token"=>"w0ZEn95G0dTDtQXVJrUO90/0Eepi4y40NUNDiYuUwzODDmFvcNoamWuNcQJhhTnng0OHE2fbWYzwLT3Iza3kkA==", "post"=><ActionController::Parameters {"title"=>"csc", "material"=>"csdca", "body"=>"dsacdac", "category_id"=>"食材"} permitted: false>, "commit"=>"送信", "category_id"=>"豚肉", "controller"=>"posts", "action"=>"create"} permitted: false>

試したこと

データの投稿は通っていると仮定し、受け取る際のストロングパラメータに問題があると感じたが、上記のように修正してもデータは保存されなかった。

よろしくお願いいたします。

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

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

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

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

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

guest

回答1

0

createで問題が起きているのになぜcreateを省略しますかね。

rollbackが起きているのは、必須な categor_id が渡っていないからです。
paramaterみるとcategory_idが post =>{}の外にあります。
viewからみて、なぜ外になるのか、ちょっと見では原因不明

で、渡そうとしているcategory_id がstringなのが ??? です。
belongs_to :category でrailsが想定するのは integerです。
そうでないことも可能ですが、宣言がもっと複雑になります。

追記
category_id が integer なら
@category_parent_array << parent.name

@category_parent_array << [parent.id,parent.name]

てか、、、

@category_parent_array += Category.where(ancestry: nil).pluck(:id,:name)

投稿2020/03/19 21:16

編集2020/03/20 00:05
winterboum

総合スコア23333

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

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

makoto1026

2020/03/19 22:52

ご返信ありがとうございます! ぶしつけな質問で申し訳ありません。 ``` [post_controller] def create Post.create(post_params) end ``` と定義しています。 category_idに関しては「int型」で登録しています。 私もcategory_idをpost{ }の中に入れるためにnew.hamlのセレクトボックスのオプションを書き換えたりしてみたんですが、うまくデータが渡ってくれない現状です...
makoto1026

2020/03/22 05:08

追記 連絡が遅くなって申し訳ございません。 上記2点とも試しましたが、状況は変わりませんでした。 特にエラーも起きず、POST{ }内に:category_idが入っていない状況、そもそも、:category_idも文字列が取得されている状況のままでした...
winterboum

2020/03/22 05:34

まず、controllerのcreateのcodeを 載せましょう
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問