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

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

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

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

Ruby on Rails

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

Q&A

解決済

1回答

1020閲覧

form_withでデータが登録できない

HSRRRJSJQP

総合スコア24

Ruby

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

Ruby on Rails

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

0グッド

0クリップ

投稿2020/04/10 05:03

編集2020/04/11 07:55

#現状
プログラミング初学者で現在Rialsで要約アプリを作成中です。
form_withで入力フォームを作成し登録ボタンを押すもデータベースにデータが登録できない現状です。
1日検索して試行錯誤しましが自力で解決できず質問させて頂きます。
お手数おかけしますがご指摘宜しくお願いいたします。

##エラーメッセージなど

・ビューにはエラ〜メッセージは表示されておりません。 コントローラーでflaseの時はnewへrenderするようにしているのでfalse時の条件分岐が作用している状態です。 ・ターミナルには下記出力がされています。 User Load (1.1ms) SELECT `users`.* FROM `users` WHERE `users`.`id` = 1 ORDER BY `users`.`id` ASC LIMIT 1 ↳ app/controllers/posts_controller.rb:37 (0.2ms) BEGIN ↳ app/controllers/posts_controller.rb:15 User Load (0.6ms) SELECT `users`.* FROM `users` WHERE `users`.`id` = 1 LIMIT 1 ↳ app/controllers/posts_controller.rb:15 (0.2ms) ROLLBACK ↳ app/controllers/posts_controller.rb:15 Rendering posts/new.html.haml within layouts/application Rendered posts/_header.html.haml (3.9ms) Rendered posts/_footer.html.haml (2.7ms) Rendered posts/new.html.haml within layouts/application (22.7ms) Completed 200 OK in 101ms (Views: 84.4ms | ActiveRecord: 2.2ms)

##やったこと
①binding.pryで取得データの確認
②ROLLBACKの箇所にuser_idの記載があったのでアソシエーションの確認

###検証

①Post.new(post_params)やpost_paramsにデータが入っていることを確認。 Post.new(post_params) User Load (14.0ms) SELECT `users`.* FROM `users` WHERE `users`.`id` = 1 ORDER BY `users`.`id` ASC LIMIT 1 ↳ app/controllers/posts_controller.rb:37 => #<Post:0x00007fed558b90f8 id: nil, title: "入力内容", pharse: "入力内容", summery: "入力内容", created_at: nil, updated_at: nil, user_id: 1, image: nil, category_id: nil> ・@post.save!を行うも「NoMethodError: undefined method `save!' for nil:NilClass」``` ②userとpostのアソシエーションは組めていることを確認 (post.rb) class Post < ApplicationRecord belongs_to :user (user.rb) class User < ApplicationRecord has_many :posts

###仮説
指摘箇所を踏まえるとuser_idが原因ではないかと思います。
しかし、解決までの糸口を見いだせていない現状です。

###コード (posts.controller.rb) class PostsController < ApplicationController def index @posts = Post.all.limit(3).order("created_at DESC") end def new @post = Post.new end def create @post = Post.new(post_params) if @post.save redirect_to root_path else render :new end end # def show # end # def destroy # end # def edit # end # def update # end def post_params params.require(:post).permit( :title, :pharse, :summery, :image).merge(user_id: current_user.id) end end (appplication.controller.rb) class ApplicationController < ActionController::Base before_action :configure_permitted_parameters, if: :devise_controller? protect_from_forgery with: :exception protected def configure_permitted_parameters devise_parameter_sanitizer.permit(:sign_up, keys: [:nickname, :prefecture_id, :city, :birth_year, :birth_month, :birth_day, :age_id, :gender_id]) end end (registrations_controller.rb) class Users::RegistrationsController < Devise::RegistrationsController before_action :configure_sign_up_params, only: [:create] # before_action :configure_account_update_params, only: [:update] def new @user = User.new end def create @user = User.new(sign_up_params) unless @user.valid? flash.now[:alert] = @user.errors.full_messages render :new and return end session["devise.regist_data"] = {user: @user.attributes} session["devise.regist_data"][:user]["password"] = params[:user][:password] @information = @user.build_user_information render :new_user_information end def create_user_information @user = User.new(session["devise.regist_data"]["user"]) @information = UserInformation.new(user_information_params) unless @information.valid? flash.now[:alert] = @information.errors.full_messages render :new_user_information and return end @user.build_user_information(@information.attributes) if @user.save! sign_in(:user, @user) else new_user_registration_path end end protected def configure_sign_up_params devise_parameter_sanitizer.permit(:sign_up, keys: [:attribute]) end protected def user_information_params params.require(:user_information).permit(:prefecture_id, :city, :birth_year, :birth_month, :birth_day, :age_id, :gender_id) end def after_sign_up_path_for(resource) root_path end end

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

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

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

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

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

chocolate24

2020/04/10 11:35

本筋とは関係ないですがマークダウンで書いた方が色んな人が見やすくていいと思います。
chocolate24

2020/04/10 11:38

コード(controllerとかの)書き加えてもらっていいですか?
HSRRRJSJQP

2020/04/10 12:04

chocolate24様 ご指摘ありがとうございます。 マークダウンのご指摘ありがとうございます。 こちらも学んで活かしていきます。 取り急ぎcontrollerのコードを追記いたしました。 至らない点があると思いますが宜しくお願いいたします。
chocolate24

2020/04/11 03:52

User Load (1.1ms) SELECT users.* FROM users WHERE users.id = 1 ORDER BY users.id ASC LIMIT 1となっていますが、カラムはuser_idなのが気になります。
HSRRRJSJQP

2020/04/11 08:18

chocolate24様 ありがとうございます。 ご指摘を受けたカラムめいについてですが、 userとpostのアソシエーションでpostsテーブルには user_idで外部キーを使用しております。 ただ、ターミナル上ではuser.idとなっているので、 ご指摘の通り齟齬が出ている現状です。 そこに関して原因を調べておりますが解消までは至っていない現状です。
chocolate24

2020/04/11 08:26

わかりました!もう1度みてみます。
guest

回答1

0

自己解決

chocolate24様

お世話になります。
取り急ぎデータベースに登録することができたのでご報告です。

改めてsave!を使用し一つずつ確認作業を行い、
・ストロングパラメータの見直し
・relationの見直し
・カラムの追加と削除
などを繰り返し行ったところ登録できました。

ただ、下記の表示はそのままでした。 こちらの表示の意味合いがまだ理解できていないので勉強に励みます。 User Load (0.6ms) SELECT `users`.* FROM `users` WHERE `users`.`id` = 1 ORDER BY `users`.`id` ASC LIMIT 1 User Load (0.4ms) SELECT `users`.* FROM `users` WHERE `users`.`id` = 1 LIMIT 1

お付き合いさせてしまい失礼いたしました。
ご指摘を受けた箇所は今後に活かしてまいります。
ありがとうございました。

投稿2020/04/11 10:29

編集2020/04/11 10:33
HSRRRJSJQP

総合スコア24

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

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

chocolate24

2020/04/15 12:40

よかったです!私も勉強になりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問